.
Умар Каригов
10 уровень
может кто объяснит мне этот код простыми словами
Решен
Комментарии (18)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
НикитаExpert
6 сентября 2022, 14:11
неплохо было бы его увидеть))
0
Умар Каригов
6 сентября 2022, 16:08
public class Solution {
public static String robotank = "☖";
public static String empty = "_";
public static String hit = "🎯";
public static int width = 30;
public static int height = 10;
public static String[][] field = new String[height][width];
public static void main(String[] args) {
for (int i = 0; i < field.length; i++) {
Arrays.fill(field[i], empty);
}
for (int i = 0; i < field.length; i++) {
int j = (int) (Math.random() * width);
field[i][j] = robotank;
}
for (int i = 0; i < field.length; i++) {
for (int j = 0; j < field[i].length; j++) {
System.out.print(field[i][j]);
}
System.out.println();
}
}
}
0
Умар Каригов
6 сентября 2022, 16:09
с телефона закинул хз почему код не показывает
0
НикитаExpert
6 сентября 2022, 16:29
public class Solution {
public static String robotank = "☖";// создается переменная которой отображается танк
public static String empty = "_"; //создается переменная которой будет отображаться пустая яклетка
public static String hit = "🎯";// ...которой будет отображаться попадание по танку
public static int width = 30;ширина
public static int height = 10;высота
public static String[][] field = new String[height][width]; двумерный массив с шириной и высотой, собственно это и будет наше поле боя
public static void main(String[] args) {
for (int i = 0; i < field.length; i++) {
Arrays.fill(field[i], empty); // в этом цикле заполняем массив пустыми клетками
}
for (int i = 0; i < field.length; i++) {
int j = (int) (Math.random() * width); // а в этом размещаем танки по одному в каждом ряду случайным образом
field[i][j] = robotank;
}
for (int i = 0; i < field.length; i++) { // в эти два цикла для вывода на экран того что получилось
for (int j = 0; j < field[i].length; j++) {
System.out.print(field[i][j]);
}
System.out.println();
}
}
+1
Умар Каригов
6 сентября 2022, 17:51
первый for понять не могу.. массив же двумервый а индекс только 1 для заполнения
0
Умар Каригов
6 сентября 2022, 17:54
второй for почему добавляется только 1 танк на строку а не 2 или 5 где это написано что там только 1 добавляется и как он заменяет другой символ
0
НикитаExpert
6 сентября 2022, 17:58полезный
Arrays.fill() заполняет переданный массив переданным значением
+2
НикитаExpert
6 сентября 2022, 18:08полезный
for (int i = 0; i < field.length; i++) {
int j = (int) (Math.random() * width);
field[i][j] = robotank;
}
i меньше длины массива, длинна массива это количество строк, то есть его высота.
field[i][j] = robotank; в этой строчке i всегда на 1 больше чем в предыдущей итерации цикла, и получается что по одному танку на строку. А меняет, просто переписывает, значение ячейки на другое
+2
Умар Каригов
6 сентября 2022, 18:14
я к тому что почему не field[i][j] а field[i]
0
НикитаExpert
6 сентября 2022, 18:19полезный
метод Arrays.fill(имя, значение) заполняет весь массив, одним значением. То есть в
Arrays.fill(field[i], empty);
заполняет все ячейки массива field[i], значениями empty , и так опять же построчно все заполняется
+2
Умар Каригов
6 сентября 2022, 18:23
про заполнение более менее понял а вот про рандомный танк пока не догоняю
0
Умар Каригов
6 сентября 2022, 18:24
field.length это его длина heigth или высота width или оба сразу?
0
НикитаExpert
6 сентября 2022, 18:27полезный
public static String[][] field = new String[height][width];
так height в первых квадратных скобках, то длинна это height.
(Math.random() * width) а это генерирует случайное значение не больше числа width
+2
Умар Каригов
6 сентября 2022, 18:30
for (int i = 0; i < field.length; i++) {
int j = (int) (Math.random() * width); вот тут за 1 проход цикла выдается только 1 рандомное число?
field[i][j] = robotank; а тут почему это рандомное число присваивается j а не i ?
0
НикитаExpert
6 сентября 2022, 18:41полезный
да за один проход одно число. а j потому что это ширина строки мы рандомно выбираем ячейке в одном массиве, ее индекс и есть j
+2
Умар Каригов
6 сентября 2022, 18:46
а где мы указали что выбираем интекс только у ширины?
0
НикитаExpert
6 сентября 2022, 18:49полезный
field[i][j] = robotank;
то есть нам надо изменить одну ячейку случайным образом. Её координаты это i и j.
где i это грубо говоря номер массива а j номер ячейки в этом массиве
i у нас уже есть и будет меняться с каждым проходом цикла. остается узнать j
(int) (Math.random() * width); этой строкой мы и узнаем ее
+2
Умар Каригов
6 сентября 2022, 19:02
Спасибо большое что разжевал эту задачу))
+2