多个条件else / if陈述有误吗?

时间:2019-01-10 07:51:15

标签: java if-statement boolean conditional-statements

我正在做一个黑客网络挑战,其中n是一个整数输入。条件是:

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

我确定代码具有逻辑性,并且不认为其中存在语法。它给出了正确的响应,并且黑客网络仍然说出了它的错误,因此我来这里看看是否有人可以看到问题所在

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

    if (N % 2 != 0 || N % 2 == 0 && N >= 6 && N <= 20)
    {
        System.out.print("weird");
    }
    else
    {
        System.out.print("not weird");
    }
}

7 个答案:

答案 0 :(得分:1)

问题是您的else条件下的逻辑,它还会捕获N小于2的值。

if (N % 2 != 0)
{
    System.out.print("weird");
}
else if (N >= 2 && N <= 5 || N > 20)
{
    System.out.print("not weird");
}
else if (N >= 6 && N <= 20)
{
    System.out.print("weird");
}
else
{
    // NOTE: if the code still fails, remove this else condition
    System.out.print("unexpected value of N");
}

注意:要使您的代码通过Hackernet任务,您可能必须完全删除else条件。我添加它是为了完整性,但是Hackernet可能会测试N=1来查看是否没有打印出来。

答案 1 :(得分:1)

阅读此条件:

if (N % 2 != 0 || N % 2 == 0 && N >= 6 && N <= 20)

if (N % 2 != 0 || (N % 2 == 0 && N >= 6 && N <= 20))

然后查看运算符优先级如何改变行为并产生期望的结果。

答案 2 :(得分:0)

您可以尝试

 private 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])?");
            if (n % 2 == 1 || (n >= 6 && n <= 20)) {
                System.out.println("Weird");
            } else {
                System.out.println("Not Weird");
            }
            scanner.close();
        }

答案 3 :(得分:0)

检查以下内容

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

        if(N%2!=0) {
            System.out.print("weird");  
        }else if(N>=2 && N<=5) {
            System.out.print("not weird");
        }else if(N>=6 && N<=20) {
            System.out.print("weird");
        }else if(N>20) {
            System.out.print("not weird");
        }

    }

答案 4 :(得分:0)

在技术方面:首先阅读 precedence of java operators,然后使代码更易于阅读。

如果将多个条件放入一个条件中,则没有有用。您可以自己查看:您认为代码是正确的,但可能并非如此。现在,您希望其他人向您解释您过于复杂的代码。当然,所有其他答案都可以为您完成所有任务……但除此之外:

这里的“真实”答案是:了解如何测试您的代码。

编写一个方法boolean isWeird()来获取一个数字,然后根据您的要求返回true / false,而不是使用一个主函数来问一个数字,然后再做决定。

然后只需在所有合理的情况下测试该方法。然后检查结果是否符合预期。

使用JUnit,您可以编写类似

的内容
 assertThat(isWeird(1), true);
 assertThat(isWeird(21), true);
 assertThat(isWeird(22), true);
 ...

理想情况下,在实现该方法之前 编写此类测试。然后,您实现了所有条件,并且所有失败的检查都告诉您您做错了事。

答案 5 :(得分:0)

我觉得,在if(N%2!= 0 || N%2 == 0 && N> = 6 && N <= 20)条件下,您正在使用&&验证奇数和偶数和||操作员。如果(N%2!= 0 ||(N%2 == 0 && N> = 6 && N <= 20))可以检查条件吗?如果N为奇数,则将打印怪异的东西;如果N为偶数,且其值在6和20(含)以下,则将打印怪异的东西。

答案 6 :(得分:0)

您已经在这里有了很多答案,但是如果您从逻辑上考虑您的实际需求,则可以轻松地将其分解。

看起来唯一的"Not Weird"打印输出是24甚至偶数> 20

所以一个例子可能是这样的:

if (n % 2 == 0) {
    if ((n >= 2 && n <= 5) || (n > 20)) {
        return "Not Weird";
    }
}
return "Weird";