Проблема с переопределением toString() в Java

57
5

У меня есть назначение практиковать интерфейсы, абстрактные классы, подклассы и наследование для моего класса Java. В моем абстрактном суперклассе (называемом матрицей) я должен переопределить метод toString() (используя ту же подпись), чтобы он печатал все элементы массива, разделенные пробелом и строками, разделенными разрывом строки. Как это:

 public String toString(){

String result="";

for(int x=0; x<nRows(); x++){
for(int y=0; y<nColumns(); y++){
result+=""+get(x,y)+" ";
}
result+="\n";
}
return result;
}

Насколько мне кажется, это так хорошо. Затем в одном из подклассов (FullMatrix) Matrix у меня есть статический метод, генерирующий случайные числа для заполнения матрицы amxn. Способ заключается в следующем:

    public static FullMatrix randomMatrix(int m, int n, double low, double high){

FullMatrix resultMatrix = new FullMatrix(m,n);
for(int x=0; x<m; x++){
for(int y=0; y<n; y++){
resultMatrix.set(x,y,Math.round(low+Math.random()*(high-low)));

}
}
return resultMatrix;
}

Опять же, никаких проблем пока нет. НО, в моем основном методе, в другом классе, когда я вызываю статический метод randomMatrix следующим образом:

FullMatrix a = new FullMatrix(4,4);
a.randomMatrix(4,4,-3,5);

он возвращает мне Матрицу, полную нулей. Я думал, что проблема связана с моим алгоритмом рандомизации, но нет. Я начал отладку, и, оказывается, моя resultMatrix из метода randomMatrix использует метод toString и становится одной большой строкой (которая должна печатать результат), поэтому я не могу назначить новые случайные значения для элементов. Странно, что toString() никогда не вызывается в randomMatrix. Итак, почему метод resultMatrix использует метод toString? Я попытался прокомментировать переопределение toString в моем суперклассе, и он решает проблему, но в моем задании мне приходится печатать матрицы таким образом.

Помогите? Что я делаю не так?

спросил(а) 2017-02-17T00:25:00+03:00 3 года, 7 месяцев назад
1
Решение
57

Вы не должны вызывать статические методы, используя объект, поскольку это не имеет смысла.

Матрицы a и resultMatrix представляют собой два независимых объекта. Чтобы получить случайную матрицу, вызовите:

Matrix m = FullMatrix.randomMatrix(...);

ответил(а) 2017-02-17T00:31:00+03:00 3 года, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема