Для решения этой проблемы необходимы 2 уловки:
Поймите, что полный цикл от 0,100
до 0,100
составляет 200 итераций, затем используйте оператор %
остаток для написать бесконечное l oop в диапазоне 0-199.
Используйте Math.abs()
1 , чтобы превратить отрицательное число в положительное число.
Вот 2 строки кода, которые будут давать желаемый бесконечный вывод:
for (int i = 0; ; i = (i + 1) % 200)
System.out.printf("%-6d%d%n", 100 - Math.abs(100 - i), Math.abs(100 - i));
Пояснение
for (;;)
- это все oop, которое работает «навсегда» ( бесконечно ). Это то же самое, что и for (; true; )
, и то же самое, что и while (true)
, но использование for
позволяет хранить int i = 0
, l oop и i = (i + 1) % 200
вместе в одной строке кода.
i = (i + 1) % 200
означает, что когда i = 199
, следующее значение равно i = 0
, начиная последовательность заново, навсегда повторяя значения 0..199.
100 - i
делает последовательность 0 .. 199 становится 100 ..- 99.
Math.abs(100 - i)
делает последовательность равной 100..0..99, то есть второму столбцу выходных данных.
100 - Math.abs(100 - i)
делает последовательность равной 0..100..1, т. Е. Первый столбец вывода.
printf("%-6d%d%n", ...)
позволяет печатать красиво в 2 столбца.
1) Если Math.abs()
не допускается, вместо этого используйте троичный условный оператор ?:
:
printf("%-6d%d%n", (i < 100 ? i : 200 - i), (i < 100 ? 100 - i : i - 100))