Пытаюсь заполнить трёхмерный массив случайными числами от 0 до 1:
//объект класса Random
Random random = new Random();
//создаём трёхмерный массив(3 столбца, 3 ряда)
int[][][] array = new int[3][3][3];
//заполняем его случайными значениями
for(int i = 0 ; i < array.length; i++ ){
for(int j = 0 ; j < array[i].length; j++ ){
for(int k = 0; k < array[j].length; k++) {
array[i][j][k] = random.nextInt(1);
}
}
}
System.out.println(Arrays.toString(array));
В конце программа должна вывести массив в виде строки, но выводит это:
[[[I@74a14482, [[I@1540e19d, [[I@677327b6]
Как исправить?
Этот вывод вполне логичен.
Лучше, конечно, написать для этого отдельный метод, и делать это в цикле.
Или использовать готовые/другие способы из других ответов. Ниже объясняю, в чём проблема.
Метод Arrays.toString
обходит массив не рекурсивно, он пробежался в цикле по самому верхнему массиву и для каждого его элемента вызвал String.valueOf(a[i])
, а каждый элемент - это двумерный массив. Ведь трехмерный массив это массив двумерных массивов, то есть массив массивов одномерных массивов :) А ошибки не было потому, что трехмерный массив это тоже одномерный массив, только его элементы тоже массивы.
Вам поможет Arrays.deepToString(array)
array[i][j][k] = random.nextInt(1);
Этот код заполнит ваш массив только 0, т.к. метод nextInt
на вход принимает границу невключительно. В вашем случае нужно передать 2 - тогда в массиве будут 0 и 1.
Как писали ранее для вывода массива вы можете:
1. Обойти массив таким же способом как вы его заполняли (либо выводить значение сразу после заполнения
for(int i = 0 ; i < array.length; i++ ){
for(int j = 0 ; j < array[i].length; j++ ){
for(int k = 0; k < array[j].length; k++) {
array[i][j][k] = random.nextInt(2);
System.out.print(array[i][j][k] + " ");
}
System.out.println();
}
System.out.println();
}
1 1 1
1 1 1
1 0 0
0 1 0
1 1 0
0 1 1
0 1 0
0 0 1
0 1 1
2.Использовать Arrays.deepToString(array)
:
System.out.println(Arrays.deepToString(array));
[[[1, 1, 1], [1, 1, 1], [1, 0, 0]], [[0, 1, 0], [1, 1, 0], [0, 1, 1]], [[0, 1, 0], [0, 0, 1], [0, 1, 1]]]
3.Извращаться с помощью stream-ов :) (делать этого, конечно, не стоит)
Arrays.stream(array)
.flatMap(Arrays::stream)
.map(Arrays::stream)
.map(IntStream::boxed)
.map(s -> s.map(String::valueOf).collect(Collectors.joining(" ")))
.forEach(System.out::println);
1 1 1
1 1 1
1 0 0
0 1 0
1 1 0
0 1 1
0 1 0
0 0 1
0 1 1
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как происходит вызов show ? makeText статичный метод, с ним все понятно, но как дальше вызывается show ? ведь он не статичный а объект создан не был
Есть вложенное меню, при наведении на список выводиться его подменюНа мобильной версии нет понятия hover, и чтобы появилось подменю нужно нажать...
Как в этом шаблоне https://scriptedencom/previews/Clean/ сделать ширину страницы под область просмотра?