Java-объект не может быть разрешен (в переменную)



Сначала извините, если не все понятно (я из Германии). И, пожалуйста, постарайтесь понять, что я новичок в java и, возможно, совершил несколько глупых ошибок. У меня два класса. Один с конструктором и функциями, а другой с меню.



Класс 1 (конструктор и функции):



public class Matrix {
private float[][] matrix;
...
public void createMatrix(int zei, int spa){
...
public void printMatrix(){
int x = 0;
while (x < this.matrix.length){
for (float elem : this.matrix[x]){
System.out.printf("%10d", elem);
}
x++;
System.out.println();
}
System.out.println();
}


Класс 2 (Меню):



public class MenuMatrix{
public static void menue(){
...
if (m1 == null){
Matrix m1 = new Matrix();
m1.createMatrix(zei, spa);
}
else if (m2 == null){
Matrix m2 = new Matrix();
m2.createMatrix(zei, spa);
}
else{
System.out.println("Which matrix do you want to replace?");
m1.printMatrix();
m2.printMatrix();
int x = readInteger("Please choose matrix (1) or (2).");
...


Я хотел убедиться, что только 2 объекта такого рода могут существовать. Поэтому я включил проверку, если объект уже существует (m1/m2 == нулевой). Есть первая ошибка. В строке с if-предложениями он говорит мне ,что"m1/m2 не может быть разрешен в переменную". Другая ошибка приходит в m1/m2.строка printMatrix (). Eclipse говорит:"m1/m2 не могут быть разрешены".
Информация на нескольких различных сайтах сказала мне, что это должно работать таким образом. Я надеюсь, вы скажете мне, в чем именно заключается проблема.

Заранее благодарю.

670   2  

2 ответов:

Глядя на ваш пример кода:

if (m1 == null){
    Matrix m1 = new Matrix();
    m1.createMatrix(zei, spa);
}
else if (m2 == null){
    Matrix m2 = new Matrix();
    m2.createMatrix(zei, spa);
}
Обратите внимание, что переменные Matrix m1 и m2 объявляются после первой ссылки на них. Эти объявления также находятся в области действия блока if, что приведет к их отбрасыванию, как только поток выполнения выйдет из блока и продолжится снаружи. Другими словами, когда парсер достигает проверки if (m1 == null), он замечает, что переменные с именами m1 и m2 не существуют. пока.

Вам нужно будет переместить Объявления за пределы тела операторов if, чтобы убедиться, что они существуют, прежде чем пытаться использовать их в заданной области. Быстрый поиск должен предоставить хорошую информацию о правилах определения области действия переменных для любого языка.

Один из возможных способов здесь-превратить ваши переменные в частные члены класса MatrixMenu, например:
public class MatrixMenu {
    private Matrix m1;
    private Matrix m2;
    // ...
    if (m1 == null){
        m1 = new Matrix();
        m1.createMatrix(zei, spa);
    }
    else if (m2 == null){
        m2 = new Matrix();
        m2.createMatrix(zei, spa);
    }
    // ...
Это один из возможных способов решить вашу проблему.

PS: еще один момент заключается в том, что вы следует рассмотреть возможность удаления метода createMatrix и вместо этого передать эти аргументы конструктору Matrix, чтобы создать допустимый / инициализированный экземпляр матрицы, как только new возвратится. Другими словами:

public class Matrix {
    private float[][] values;
    public Matrix(int rows, int columns) {
        // throw exception if any argument is <= 0

        values = new float[rows][columns];
        // ...
    }
    // ...
}

Вы ссылаетесь на эти переменные до их объявления.

Comments

    Ничего не найдено.