Как я могу упростить этот код нечетных чисел? - PullRequest
0 голосов
/ 25 октября 2019

Есть ли способ упростить этот код программы, который печатает нечетные числа между 2 числами, которые вводит пользователь, idk, возможно, в объявлении for. Я имею в виду, сделать то же самое, но без, если, только для?

int n1,n2;
System.out.println("Enter first number");
n1 = keyboard.nextInt();
System.out.println("Enter second number");
n2 = keyboard.nextInt();
for (int i=n1; i < n2; i++)
{
    if( i % 2 != 0)
    {
        System.out.println(i + " ");
    }
}

Ответы [ 5 ]

3 голосов
/ 25 октября 2019

Да. Начните с нечетного n1 (перед циклом) и добавляйте 2 на каждой итерации. Мол,

if (n1 % 2 == 0) {
    n1++;
}
for (int i = n1; i < n2; i += 2) {
    System.out.println(i + " ");
}
1 голос
/ 25 октября 2019

Без оператора if это должно работать:

n1 += 1 - (n1 % 2); // (add 1 if n1 is even number, else 0)

for (int i = n1; i < n2; i += 2) {
    System.out.println(i + " ");
}

0 голосов
/ 25 октября 2019
for (int i = (n1 % 2) == 0 ? n1 : n1+1 ; i < n2; i += 2) {
    System.out.println(i + " ");
}
0 голосов
/ 25 октября 2019

Если вы используете Java 8+, вы можете заменить цикл for на IntStream. Но это только улучшит представление вашего кода, но будет внутренне использовать if (из прямого визуального интерфейса оно удалит if):

IntStream.range(n1, n2).filter(i -> i % 2 != 0).forEach(i -> {
      System.out.println(i + " ");
});
0 голосов
/ 25 октября 2019

Вы можете использовать лямбда-выражение

IntStream.range( n1, n2 ).filter( n -> (n & 1) != 0 ).forEach( odd -> System.err.println( odd ) );
...