Можно ли объединить два не вложенных цикла for в один? - PullRequest
0 голосов
/ 18 октября 2018

У меня есть пример вопроса, где мы должны найти кратные 10 между двумя числами.Вот код, который я написал, и хотя он работает, есть ли лучший способ написать этот код?

Scanner keyboard = new Scanner(System.in);
    int value = keyboard.nextInt();
    int limit = keyboard.nextInt();
    int div = 10;

    for (;div<value;div+=10)
        System.out.print("");

    for (;div<=limit;div+=10)
        System.out.println(div);

    keyboard.close();

Первый цикл for раздражает меня.Какие-либо предложения?

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

System.out.print("") ничего не делает, поэтому ваш первый цикл можно переписать следующим образом:

int div = 10;
for (; div < value; div += 10)
    ;

Эффект этого кода состоит в том, что div - это значение value, округленное доБлижайшее кратное 10. Это можно вычислить следующим образом, используя int math (где деление на 10 округлений вниз):

int div = (value + 9) / 10 * 10;

Исходный код приведет к минимальному значению 10, поэтомуесли value <= 0 формула будет вычислена неправильно.Мы можем использовать троичный условный оператор для учета этого:

int div = (value <= 10 ? 10 : (value + 9) / 10 * 10);

Итак, сокращенная версия вашего кода становится:

Scanner keyboard = new Scanner(System.in);
int value = keyboard.nextInt();
int limit = keyboard.nextInt();

for (int div = (value <= 10 ? 10 : (value + 9) / 10 * 10); div <= limit; div += 10)
    System.out.println(div);

keyboard.close();
0 голосов
/ 18 октября 2018

Использование java-8:

IntStream.rangeClosed(value, limit).filter(i -> i % 10 == 0).forEach(System.out::println);

Здесь value - начальный индекс, а limit - конечный.

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