package com.javarush.task.task03.task0314;
/*
Таблица умножения Ӏ Java Syntax: 3 уровень, 6 лекция
*/
public class Solution {
public static void main(String[] args) {
int a = 1;
while (a != 11){
int b =1;
while (b != 11) {
System.out.print(a * b + " ");
b++;
}
System.out.println();
a++;
}//напишите тут ваш код
}
}
Iurii
9 уровень
Сейчас тут правильное решение, объясните пожалуйста, почему когда int b = 1 стояло не внутри цикла, а после int a = 1; программа выполнялась неправильно!?
Обсуждается
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
ГоффMaster
3 декабря 2020, 20:26
Если "int b = 1 стояло не внутри цикла, а после int a = 1", то происходит следующее. Сначала a = 1 и b начинается с 1 и во внутреннем цикле увеличивается до 11, первая строчка таблицы умножения выводится корректно. Когда b = 11, внутренний цикл заканчивается и начинается новая петля внешнего цикла, где a = 2. При этом b у тебя по-прежнему равно 11. При втором проходе внешнего цикла внутренний цикл while (b != 11) не выполнится вообще, потому что b = 11, вторая строчка таблицы не выведется. Следует новая петля внешнего цикла, а = 3, b = 11. Потом новая, где a = 4, b = 11, ну и так далее. В итоге выведется только первая строка таблицы.
А если в начале каждой новой петли внешнего цикла b реинициализируется с изначальным значением 1, то внутренний цикл while (b != 11) каждый раз будет отрабатывать, и вторая, и третья и все последующие строки выведутся корректно.
В принципе, можно и даже лучше int b = 1; вставить сразу после int a = 1;, вне цикла. Но при этом вставить b = 1; после или перед a++;, что бы b возвращалось к изначальному значению.
Обрати внимание на совет Филиппа - если не знаешь, где ошибка, то надо в программу вставить отладочный вывод и проследить значения ключевых переменных.
0
Филипп
3 декабря 2020, 19:47
Вообще когда непонятное что-то твориться: можно в конце каждой строчки написать принты, например:
ну и так далее, тогда можно прочитав лог понять в чем дело.
Ну а если совсем лень то ответ:
если обьявить б вне цикла то после того как она 1й раз стала 11, то она все остальные а так 11 и остается. и все остальные циклы сразу не проходят while (b != 11). Точнее обьявить то ее можно было где угодно, но вот после while (a != 11){ нужно было ее снова сделать =1ю 0
Pig Man Главная свинья в Свинарнике
3 декабря 2020, 20:14
Дебажить не проще?
0
ГоффMaster
3 декабря 2020, 20:30
Иногда проще дебажить, иногда проще отладочный вывод. На третьем уровне однозначно проще второе.
0
Pig Man Главная свинья в Свинарнике
3 декабря 2020, 20:35
Так речь о том, чтобы просто посмотреть состояние переменных, там для этого учить особо ничего не нужно: нажал на жучка, а потом на стрелочку жмешь до нужного места
0
ГоффMaster
3 декабря 2020, 21:06
В дебаггере много возможностей и пока своим умом доберёшься до этого "нажал на жучка, а потом на стрелочку жмешь до нужного места" и не заблудишься по дороге, пройдёт немало времени. А команда вывода переменной уже на этом уровне хорошо знакома. Если можешь решить проблему, не привлекая дополнительных инструментов - решай, не привлекая их ))
Бритва Оккама))
0