2D-массив, вывод далеко не правильный

import java.util.Scanner;

public class Maze {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int rows = 0;
        int cols = 0;
        String arrayLine = "";
        int counter = 0;

        rows = sc.nextInt();
        cols = sc.nextInt();
        arrayLine = sc.next();

        char[][] array = new char[rows][cols];

        for(int r=0; r<rows; r++){
            for (int c=0; c<cols; c++){
                array[r][c] = arrayLine.charAt(counter);
                counter ++;
            }
        }

        System.out.println(array);
        System.out.println();
    }
}

Документ, из которого я беру информацию:

8
7
000000011111S0000000110101111010101100010110111011010E00

Вывод, который я получаю при запуске, равен [[C@252f0999

Помогите пожалуйста, я только начинаю изучать java!


person Jonathan Murray    schedule 27.01.2013    source источник


Ответы (2)


array - это объект особого типа, у него нет неявного toString(), который управляет красивой печатью содержимого массива, происходит то, что объект представлен стандартным представлением для объектов, которое является его хэш-кодом.

Вы должны использовать Arrays.toString():

for (int i = 0; i < array.length; ++i)
  System.out.println(Arrays.toString(array[i]));

Имейте в виду, что вы не можете напрямую написать Arrays.toString(array), потому что, как указано в документации:

Если массив содержит в качестве элементов другие массивы, они преобразуются в строки методом Object.toString(), унаследованным от Object, который описывает их идентификаторы, а не их содержимое.

person Jack    schedule 27.01.2013

Когда вы вызываете println() для объекта, Java по умолчанию возвращает местоположение ресурса (это то, что C@252....). Вы хотите позвонить

System.out.println(Arrays.deepToString(array) 

для отображения данных в массиве.

person drew moore    schedule 27.01.2013