Требуется пояснение вывода цикла? - PullRequest
0 голосов
/ 10 мая 2019

Мне нужно объяснение того, как на выходе печатаются 9 (S), 7 (S), 5 (S) и 3 (S).

10> 3 правильно и переходит к y 1 <= 2, что правильно, поэтому 2 x 10 - 2 = 18, но вывод выводит 9. Я не понимаю логику здесь. Почему печатается 9 (s) вместо 18 (s)? </p>

public class Q2{
public static void main(String args[]) {
int x,y;
for(x= 10;  x > 3;  x = x - 2) {
        for(y = 1;  y <= 2 * x - 2;  y = y + 2)
            System.out.print("S");
            System.out.print("\n");
            } 
}  
}

Ответы [ 2 ]

1 голос
/ 10 мая 2019

Это правильный Y <= 18, но вы увеличиваете Y на 2, поэтому он печатается 9 раз. </p>

0 голосов
/ 10 мая 2019

Чтобы понять, запишите на листе бумаги, какими будут значения ваших переменных.

Сначала запишите значения x:

x:  10   8   6   4

Далее,запишите рассчитанное значение верхней границы для y, то есть результат выражения 2 * x - 2:

x   :  10   8   6   4
yMax:  18  14  10   6

Last, запишите значения y:

x   :  10   8   6   4
yMax:  18  14  10   6
y   :   1   1   1   1
        3   3   3   3
        5   5   5   5
        7   7   7
        9   9   9
       11  11
       13  13
       15
       17

Наконец, подсчитайте количество y значений для каждого x значения, т. Е. Сколько раз будет напечатано S:

x    :  10   8   6   4
count:   9   7   5   3

. Затем поймите, что код будет гораздо проще понять, еслиэто только что было написано так:

for (int count = 9; count >= 3; count -= 2) {
    for (int i = 0; i < count; i++) {
        System.out.println("S");
    }
}

Конечно, это не научило бы вас тому, что они пытались научить вас, а именно:

Заключение: Если вы не понимаете, что делает код, следуйте логике шаг за шагом и запишите, что он делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...