используя оператор if else для сканирования и печати нечетных и четных чисел - PullRequest
0 голосов
/ 08 апреля 2020

У меня проблема с этим оператором if else. Требование:

  • Если n нечетно, выведите Weird
  • Если n четное и находится в диапазоне от 2 до 5, выведите Not Weird
  • Если n - четное и включительно в диапазоне от 6 до 20, выведите Weird
  • Если n - четное и больше 20, выведите Not Weird.

Когда введено число 18 ожидается, что результат будет Странно. То же самое для номера ввода 20 .

    import java.util.*;

public class Solution {
    public static final Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        int N = scanner.nextInt();
        scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

        scanner.close();

        String ans = "";

        if ((N % 2) == 1) {
            ans += "Weird";
            System.out.println(ans);
        } 
        else if ((N % 2) == 0) {
            if (N >= 2 || N <= 5) {
                ans += "Not Weird";
                System.out.println(ans);
            }
        } 
        else if ((N % 2) == 0) {
            if (N >= 6 || N <= 20) {
                ans += "Weird";
                System.out.println(ans);
            }
        } 
        else if ((N % 2) == 0) {
            if (N > 20) {
                ans += "Not Weird";
                System.out.println(ans);
            }
        }
    }
}

Редактировать: Но когда я введу число 18 вместо Weird вывод выглядит как Not Weird. , то же самое для числа 20.

Ответы [ 3 ]

2 голосов
/ 08 апреля 2020

Попробуйте этот код.

import java.util.*;

public class Solution {
    public static final Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        int N = scanner.nextInt();
        scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

        scanner.close();

        String ans = "";

        if ((N % 2) == 1) {
            ans += "Weird";
        } else {
            if (N <= 5) {
                ans += "Not Weird";
            } else if (N <= 20) {
                ans += "Weird";
            } else {
                ans += "Not Weird";
            }
        }
        System.out.println(ans);
    }
}
1 голос
/ 08 апреля 2020

Используя троичные операторы, вы можете выполнить критерии в одной строке кода:

n % 2 != 0 ? "Weird"
                : (n >= 2 && n <= 5 ? "Not Weird" : (n >= 6 && n <= 20 ? "Weird" : (n > 20 ? "Not Weird" : "")))

Демонстрация:

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        // Create a list of test integers from 1 to 25
        List<Integer> testNumbers = IntStream.rangeClosed(1, 25).boxed().collect(Collectors.toList());
        for (int n : testNumbers) {
            System.out.println(n + " -> " + whatIsIt(n));
        }
    }

    static String whatIsIt(int n) {
        return n % 2 != 0 ? "Weird"
                : (n >= 2 && n <= 5 ? "Not Weird" : (n >= 6 && n <= 20 ? "Weird" : (n > 20 ? "Not Weird" : "")));
    }
}

Выход:

1 -> Weird
2 -> Not Weird
3 -> Weird
4 -> Not Weird
5 -> Weird
6 -> Weird
7 -> Weird
8 -> Weird
9 -> Weird
10 -> Weird
11 -> Weird
12 -> Weird
13 -> Weird
14 -> Weird
15 -> Weird
16 -> Weird
17 -> Weird
18 -> Weird
19 -> Weird
20 -> Weird
21 -> Weird
22 -> Not Weird
23 -> Weird
24 -> Not Weird
25 -> Weird

Не стесняйтесь комментировать в случае каких-либо сомнений / проблем.

0 голосов
/ 08 апреля 2020

Поскольку вы печатаете ans в каждом возможном случае, это может быть за пределами операторов if.


if ((N % 2) == 1) {
    ans += "Weird";
}
else { //We know N is not odd, so it must be even
    if (N <= 5) {
        ans += "Not Weird";
    }
    else if (N <= 20) { //We know N<=5 is false, so N>5 must be true
        ans += "Weird";
    }
    else{ //we know N<=20 is false, so N >20 must be true
        ans += "Not Weird";
    }
}
System.out.println(ans);
...