Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Java > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 07.08.2018, 08:07   #1
Nastya2018
Форумчанин
 
Регистрация: 24.07.2018
Сообщений: 108
Репутация: -7
По умолчанию Почему выводит ошибку в equals

Вот такая ошибка
Выводит такую ошибку когда сравниваю matrix1d и matrix2d
Код:

Matrix:
Exception in thread "main" java.lang.ClassCastException: matrix.Matrix2D cannot be cast to matrix.Matrix1D
[ -20  64
  -35  128  ]
Matrix:
[ 1  2
  3  4  ]
	at matrix.Matrix1D.equals(Matrix1D.java:68)
	at matrix.Main.main(Main.java:32)
C:\Users\Nastya\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
СБОРКА ЗАВЕРШЕНА СО СБОЕМ (общее время: 0 секунд)

вот код-
Код:

package matrix;
import java.util.LinkedList;
import java.util.List;
public class Main extends Exception {

    public static void main(String[] args) throws MatrixIndexException {
        Matrix1D m = new Matrix1D(2,2);
        Matrix2D m1 = new Matrix2D(2,2);
        m.put(1, 1, -20);
        m.put(1, 2, 64);
        m.put(2, 1, -35);
        m.put(2, 2, 128);
        m1.put(1, 1, 1);
        m1.put(1, 2, 2);
        m1.put(2, 1,  3);
        m1.put(2, 2, 4);
        
        System.out.println(m.toString());
        
        System.out.println(m1.toString());
        
        System.out.println(m.equals(m1));
        
        
        }

матрикс1D
Код:

/*
package matrix;

public class Matrix1D extends Matrix {

    private int rowCount;
    private int colCount;
    private int[] data;

    Matrix1D(int row, int col) throws MatrixIndexException {
        if (row <= 0 || col <= 0) {
            throw new MatrixIndexException("Недопустимый размер матрицы.");
        }
        this.rowCount = row;
        this.colCount = col;
        data = new int[row * col];
    }

    Matrix1D(Matrix1D matrix) {

        this.rowCount = matrix.getRowCount();
        this.colCount = matrix.getColCount();
        data = new int[rowCount * colCount];

        for (int i = 1; i < rowCount; i++) {
            for (int j = 1; j < colCount; j++) {
                data[i * colCount + j] = matrix.data[i * colCount + j];
            }
        }
    }

    public int get(int i, int j) throws MatrixIndexException {
        if (i < 1 || i > rowCount) {
            throw new MatrixIndexException("Недопустимое число строк: " + i);
        }
        if (j < 1 || j > colCount) {
            throw new MatrixIndexException("Недопустимое число столбцов: " + j);
        }

        return data[(i - 1) * colCount + j - 1];
    }

    void put(int i, int j, int value) throws MatrixIndexException {
        if (i < 1 || i > rowCount) {
            throw new MatrixIndexException("Недопустимое число строк: " + i);
        }
        if (j < 1 || j > colCount) {
            throw new MatrixIndexException("Недопустимое число столбцов: " + j);
        }
        data[(i - 1) * colCount + j - 1] = value;

    }

    public int getRowCount() {
        return rowCount;
    }

    public int getColCount() {
        return colCount;
    }

    @Override
    public boolean equals(Object obj) {
        Matrix1D m = (Matrix1D) obj;

        if (m.getRowCount() != rowCount || m.getColCount() != colCount) {
            return false;
        }

        for (int i = 0; i < rowCount; i++) {
            for (int j = 0; j < colCount; j++) {
                if (data[i * colCount + j] != m.data[i * colCount + j]) {
                    return false;
                }
            }
        }

        return true;
    }

    @Override
    public String toString() {
        StringBuilder out = new StringBuilder();
        out.append("Matrix:\n[ ");
        for (int i = 0; i < rowCount; i++) {
            if (i != 0) {
                out.append("\n");
                out.append("  ");
            }
            for (int j = 0; j < colCount; j++) {
                out.append(data[i * colCount + j]);
                if (j == colCount - 1) {
                    continue;
                }
                for (int k = 0; k < getMaxLength() - getIntLength(data[i * colCount + j]) + 2; k++) {
                    out.append(" ");
                }
            }
        }
        out.append("  ]");
        return out.toString();
    }
    

    private int getMaxLength() {
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < rowCount; i++) {
            for (int j = 0; j < colCount; j++) {
                int k = data[i * colCount + j];
                if (k > max) {
                    max = k;
                }
            }
        }
        return getIntLength(max);
    }
    

    private int getIntLength(int i) {
        return String.valueOf(i).length();

    }
}

Nastya2018 вне форума   Ответить с цитированием
Старый 07.08.2018, 08:07   #2
Nastya2018
Форумчанин
 
Регистрация: 24.07.2018
Сообщений: 108
Репутация: -7
По умолчанию Matrix2D

Код:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package matrix;

public class Matrix2D extends Matrix{
    
 
    private int rowCount;
    private int colCount;
    private int[][] data;
 Matrix2D(int row, int col) throws MatrixIndexException {
        if (row <= 0 || col <= 0) {
            throw new MatrixIndexException("Недопустимый размер матрицы.");
        }
        this.rowCount = row;
        this.colCount = col;
        data = new int[row][col];
    }

    Matrix2D(Matrix2D matrix) {

        this.rowCount = matrix.getRowCount();
        this.colCount = matrix.getColCount();
        data = new int[rowCount][colCount];

        for (int i = 1; i < rowCount; i++) { 
            for (int j = 1; j < colCount; j++) {
                data[i][j] = matrix.data[i][j];
            }
        }
    }

   

    public int get(int i, int j) throws MatrixIndexException {
        if (i < 1 || i > rowCount) {  
            throw new MatrixIndexException("Недопустимое число строк: " + i);
        }
        if (j < 1 || j > colCount) {
            throw new MatrixIndexException("Недопустимое число столбцов: " + j);
        }
        
        return data [i-1][j-1];
    }

    void put(int i, int j, int value) throws MatrixIndexException {
        if (i < 1 || i > rowCount) {
            throw new MatrixIndexException("Недопустимое число строк: " + i);
        }
        if (j < 1 || j > colCount) {
            throw new MatrixIndexException("Недопустимое число столбцов: " + j);
        }
        data[i-1][j-1] = value;
}

    public int getRowCount() {
        return rowCount;
    }

    public int getColCount() {
        return colCount;
    }

    @Override
    public boolean equals(Object obj) {
        Matrix2D m = (Matrix2D) obj;

        if (m.getRowCount() != rowCount || m.getColCount() != colCount) {
            return false;
        }

        for (int i = 0; i < rowCount; i++) {
            for (int j = 0; j < colCount; j++) {
                if (data[i][j] != m.data[i][j]) {
                    return false;
                }
            }
        }

        return true;
    }

    @Override
     public String toString() {
        StringBuilder out = new StringBuilder();
        out.append("Matrix:\n[ ");
        for (int i = 0; i < rowCount; i++) {
            if (i != 0) {
                out.append("\n");
                out.append("  ");
            }
            for (int j = 0; j < colCount; j++) {
                out.append(data[i][j]);
                if (j == colCount - 1) {
                    continue;
                }
                for (int k = 0; k < getMaxLength() - getIntLength(data[i][j]) + 2; k++) {
                    out.append(" ");
                }
            }
        }
        out.append("  ]");
        return out.toString();
    }

    private int getMaxLength() {
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < rowCount; i++) {
            for (int j = 0; j < colCount; j++) {
                int k = data[i][j];
                if (k > max) {
                    max = k;
                }
            }
        }
        return getIntLength(max);
    }

    private int getIntLength(int i) {
        return String.valueOf(i).length();
    }

}

Nastya2018 вне форума   Ответить с цитированием
Старый 07.08.2018, 08:49   #3
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,797
Репутация: 2143
По умолчанию

А что не понятно? Одно приложение перевести не можете?
Код:

System.out.println(m.equals(m1));

Код:

public boolean equals(Object obj) {
  Matrix1D m = (Matrix1D) obj;

Какого типа тут obj будет?
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 07.08.2018, 09:12   #4
Nastya2018
Форумчанин
 
Регистрация: 24.07.2018
Сообщений: 108
Репутация: -7
По умолчанию

Его надо написать за место equals?

public boolean equals(Object obj) {
Matrix1D m = (Matrix1D) obj;

этот код написать написать за место
(m1.equals(m))????

Последний раз редактировалось Аватар; 07.08.2018 в 13:49.
Nastya2018 вне форума   Ответить с цитированием
Старый 07.08.2018, 09:15   #5
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,797
Репутация: 2143
По умолчанию

Вы о чем? Как из моего поста это последовало? Вы свой код не узнаете? Или не вы его писали?
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 07.08.2018, 09:18   #6
Nastya2018
Форумчанин
 
Регистрация: 24.07.2018
Сообщений: 108
Репутация: -7
По умолчанию

Я писала

просто хотела спросить как можно исправить ошибку добавляла try и catch не помогает

Последний раз редактировалось Аватар; 07.08.2018 в 13:50.
Nastya2018 вне форума   Ответить с цитированием
Старый 07.08.2018, 09:20   #7
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,797
Репутация: 2143
По умолчанию

Ну так теперь объясните компилятору, как он должен конвертнуть Matrix2D в Matrix1D.

Цитата:
Сообщение от Nastya2018 Посмотреть сообщение
просто хотела спросить как можно исправить ошибку добавляла try и catch не помогает
А должно? Вы в упор не видите свою ошибку?
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 07.08.2018, 09:21   #8
Nastya2018
Форумчанин
 
Регистрация: 24.07.2018
Сообщений: 108
Репутация: -7
По умолчанию

Как можно исправить проблему, я только учусь

Я вот только пару недель занимаюсь java, можете помочь пожалуйста, все перепробывала

буду вам благодарна)

Последний раз редактировалось Аватар; 07.08.2018 в 13:50.
Nastya2018 вне форума   Ответить с цитированием
Старый 07.08.2018, 09:23   #9
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,797
Репутация: 2143
По умолчанию

Я ж вам уже написал: дописать функцию преобразования, проверить тип и конвертнуть. Можно ловить ошибку, но правильную и тогда конвертировать.

Но для начала надо ответить на вопрос, что значит сравнить одномерный вектор и матрицу.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 07.08.2018, 09:26   #10
Nastya2018
Форумчанин
 
Регистрация: 24.07.2018
Сообщений: 108
Репутация: -7
По умолчанию

Хочу двумерный массив преобразовать в одномерный

У меня же стоит этот код в двух массивах
Код:

  public boolean equals(Object obj) {
        Matrix2D m = (Matrix2D) obj;

        if (m.getRowCount() != rowCount || m.getColCount() != colCount) {
            return false;
        }

        for (int i = 0; i < rowCount; i++) {
            for (int j = 0; j < colCount; j++) {
                if (data[i][j] != m.data[i][j]) {
                    return false;
                }
            }
        }

        return true;


Последний раз редактировалось Аватар; 07.08.2018 в 13:51.
Nastya2018 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему выводит разные результаты? Javoh Общие вопросы по Java, Java SE, Kotlin 8 21.05.2018 22:52
[Pascal ABC.NET] Найдите ошибку. Почему программа при любых значениях выводит в ответ 0? HackYou Паскаль 2 11.06.2017 20:36
Почему не выводит строки? Си Вероника99 Помощь студентам 5 15.12.2016 16:23
Почему не выводит ответ? oleg866 Помощь студентам 1 01.06.2014 01:37
Почему выводит ноль? _Лето_ Общие вопросы C/C++ 4 14.11.2013 09:11


22:13.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru