Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.08.2018, 07:07   #1
Nastya2018
Форумчанин
 
Регистрация: 24.07.2018
Сообщений: 133
По умолчанию Почему выводит ошибку в 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, 07:07   #2
Nastya2018
Форумчанин
 
Регистрация: 24.07.2018
Сообщений: 133
По умолчанию 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, 07:49   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

А что не понятно? Одно приложение перевести не можете?
Код:
System.out.println(m.equals(m1));
Код:
public boolean equals(Object obj) {
  Matrix1D m = (Matrix1D) obj;
Какого типа тут obj будет?
p51x вне форума Ответить с цитированием
Старый 07.08.2018, 08:12   #4
Nastya2018
Форумчанин
 
Регистрация: 24.07.2018
Сообщений: 133
По умолчанию

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

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

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

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

Вы о чем? Как из моего поста это последовало? Вы свой код не узнаете? Или не вы его писали?
p51x вне форума Ответить с цитированием
Старый 07.08.2018, 08:18   #6
Nastya2018
Форумчанин
 
Регистрация: 24.07.2018
Сообщений: 133
По умолчанию

Я писала

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

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

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

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

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

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

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

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

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

Но для начала надо ответить на вопрос, что значит сравнить одномерный вектор и матрицу.
p51x вне форума Ответить с цитированием
Старый 07.08.2018, 08:26   #10
Nastya2018
Форумчанин
 
Регистрация: 24.07.2018
Сообщений: 133
По умолчанию

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

У меня же стоит этот код в двух массивах
Код:
  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 в 12:51.
Nastya2018 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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