【问题标题】:using if else statement to scan and print odd and even numbers使用 if else 语句扫描和打印奇数和偶数
【发布时间】:2020-04-08 11:52:07
【问题描述】:

我对这个 if else 语句有疑问。要求是:

  • 如果 n 是奇数,打印 Weird
  • 如果 n 是偶数并且在 2 到 5 的范围内,则打印 Not Weird
  • 如果 n 是偶数并且在 6 到 20 的范围内,则打印 Weird
  • 如果 n 是偶数且大于 20,则打印 Not Weird。

当输入数字是 18 时,输出应该是 Weird。 与输入数字 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 也是如此。

【问题讨论】:

  • 三个 else-if 条件相同 (N%2)==0?那是行不通的。

标签: java if-statement java.util.scanner


【解决方案1】:

试试这个代码。

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);
    }
}

【讨论】:

    【解决方案2】:

    使用三元运算符,只需一行代码即可满足条件:

    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
    

    【讨论】:

      【解决方案3】:

      由于您在所有可能的情况下都打印 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);
      

      【讨论】:

      • @JayDee 我编辑显示您不必使用 4 个单独的 println 语句
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      相关资源
      最近更新 更多