Спойлер. Тут решённая задача.
Чем отличается первый не рабочий вариант и второй рабочий. Чего я не понимаю?
первый не рабочий вариант.import
java.util.Scanner;
public class Solution {
public static void main(String[] args) throws Exception {
//напишите тут ваш код
Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt();
int n = scanner.nextInt();
for (; m > 0; m-- ) {
for (; n > 0; n-- ){
System.out.print(8);
}
System.out.println();
}
}
}
второй рабочий вариант
import java.util.Scanner;
public class Solution {
public static void main(String[] args) throws Exception {
//напишите тут ваш код
Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt();
int n = scanner.nextInt();
int m1=m;
for (; m1 > 0; m1-- ) {
int n1 = n;
for (; n1 > 0; n1-- ){
System.out.print(8);
}
System.out.println();
}
}
}
В чём причина???
Sergey
13 уровень
Почему первый вариант не ( не проходит проверку , а второй (работает и проходит проверку? Они ведь идентичны по своей конструкции и считывают отни и теже данные
Решен
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia VolkovaJava Developer в DXCMaster
19 марта 2021, 10:32
В первом случае после вывода 1-й строки n станет равно 0, и внутренний цикл больше выполняться не будет - то есть остальные строки не будут выведены.
0
Sergey
19 марта 2021, 10:53
Почему n после первой строки будет равнятся 0.? Она должна уменьшится всего лишь
на 1.(n--). Есть возможность расширить ответ как для детишек? Не очень понятен механизм работы.
0
KIRAРазработчик в prosv.ruExpert
19 марта 2021, 11:06полезный
после первого прохода цикла m станет 2, а n как была 0 так и останется
m = 2 n = 0 вывели пустую строку
m = 1 n = 0 вывели пустую строку
+1
Ksenia VolkovaJava Developer в DXCMaster
19 марта 2021, 11:07
Не после первой строки цикла, а после вывода первой строки из восьмерок.
Внутренний цикл (с n) выводит строку из восьмерок. Чтобы вывести одну строку, он должен отработать полностью. Чтобы вывести m строк, он должен отработать полностью m раз.
Но при первом варианте кода он выполнится только один раз. После этого n станет равно 0, и следующие строки выводиться не будут.
0
Sergey
19 марта 2021, 11:17
то есть строкой int n1 = n; мы возвращаем прежнее значение( допустим 4)? И запусаем малый цикл по новой после первого прохода большого цикла?
0
Ksenia VolkovaJava Developer в DXCMaster
19 марта 2021, 11:19
Именно так.
0
Sergey
19 марта 2021, 11:23
Большое спасибо.) Так понятнее.
0
Сергей Нестерук
19 марта 2021, 18:28
Могу ещё добавить, что как ты уже понял есть область видимости и жизни переменной. У тебя так сказать объявленная в начале переменная, потом в итерации цикла уменьшалась из-за n--;
Тут оптимальней было бы использовать для цикла отдельную переменную и приравнивать её к своей, полученной с консоли.
Например получил 6 и присвоил:
При таком варианте можем даже наше введенное 6 использовать где-то дальше так как оно у нас осталось неизменным.
+1