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 не могут быть разрешены".
Информация на нескольких различных сайтах сказала мне, что это должно работать таким образом. Я надеюсь, вы скажете мне, в чем именно заключается проблема.
Заранее благодарю.
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