Как использовать вложенный цикл для обратного отсчета? - PullRequest
0 голосов
/ 19 декабря 2018

Я не могу понять, как считать вверх, а затем вниз, используя вложенный цикл.В настоящее время мой вывод:

2
33
444
5555
66666

Когда я хотел, чтобы это выглядело так:

2
33
444
33
2

Я не уверен, как это исправить.Я работал над этим вечно, и не могу представить, как все изменить, чтобы заставить его работать.

Вот мой текущий код, который производит первый вывод:

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

В вашем примере второй из ваших внутренних циклов ничего не делает, он никогда не запускается, только первый выводит результат.Я думаю, что ваша идея была близка к тому, чтобы иметь четыре цикла, вложенных два на два.Это бы сработало, но вам нужны только два вложенных цикла, которые используются умно.

public static void main(String[] args){
    int lines = 3;
    int times = lines * 2;
    int x = 2;
    String output = "";
    for(int i = 1; i < times; i++) {
        for (int k = 1; k <= Math.min(times-i, i); k++) {
            output = output + x;
        }

        //Update the index
        if (i < times/2) {
            x++;
        } else  {
            x--;
        }

        output += "\n";
    }
    System.out.println(output);
}

Хитрость в том, как использовать индекс второго цикла: Math.min(times-i, i).

РЕДАКТИРОВАТЬ:После вашего редактирования, похоже, что вы хотите, чтобы числа «вращались» (то есть ... 8,9,0,1 ...).Для этого вы можете сделать во внутреннем цикле:

            String xS = String.valueOf(x);
            output += xS.charAt(xS.length()-1);

Другой вариант (вне внутреннего цикла):

        //Update the index
        if (i <= (times/2) - 1) {
            x++;
        } else  {
            x--;
        }
        x = x%10; //the rest of dividing x by 10
        output += "\n";
    }
0 голосов
/ 19 декабря 2018

Этот вывод имеет два интересных свойства.Для каждой строки i мы можем сказать, что:

  1. Количество символов в каждой строке является минимальным между i и times - i.
  2. Символ для печатиколичество символов в этой строке + 1.

Если сложить все вместе:

int lines = 3;
int times = lines * 2;
String output = "";
for(int i = 1; i < times; i++)
{
    int numChar = Math.min(i, times - i);
    int toPrint = numChar + 1;
    for(int k = 1; k < toPrint; k++) {
        output += toPrint;
    }

    output += "\n";
}
System.out.println(output);
...