Здесь
boolean[][] board = LightsOut.randomize();
System.out.println(board);
вы пытаетесь напечатать доску, но доска на самом деле представляет собой двумерный массив примитивных логических значений.Метод toString()
, который вы переопределили, будет работать для объектов класса, для которого метод toString()
был переопределен.Если вы передадите переменные типов массива в метод System.out.println
, он напечатает их адрес.
Если вы действительно хотите напечатать вашу логическую плату, рассмотрите возможность использования метода Arrays.toString () вloop - так как этот метод работает только для одномерных массивов.Если вы хотите напечатать двумерные массивы этим методом, вы получите адреса массивов для второго измерения.Или рассмотрите возможность использования Arrays.deepToString () , которая не требует цикла.Однако это выведет значения true / false в вашей консоли.
В вашем случае было бы целесообразно создать класс с именем Board
, который бы содержал двумерный массив логических значений в качестве члена, и вы могли бы переопределить toString()
метод для Board
класса.Тогда вы могли бы сделать что-то вроде:
Board board = new Board();
System.out.println(board);
И здесь переопределенный метод toString()
класса Board
может быть вызван неявно.
Я также заметил, чтоспособ, которым вы создаете конечный результат в этом toString()
методе, не оптимален.Вы должны прочитать о таких темах, как неизменность строк, пул строк и использование классов, таких как StringBuilder .