Java 多个条件else/if语句是否有误?

Java 多个条件else/if语句是否有误?,java,if-statement,boolean,conditional-statements,Java,If Statement,Boolean,Conditional Statements,我正在做一个黑客网络挑战,其中n是一个int输入。条件是: 如果n为奇数,则打印为奇数 如果n为偶数且在2到5的范围内,则打印不奇怪 如果n为偶数且在6到20的范围内,请打印 如果n为偶数且大于20,则打印不奇怪 我确信代码是有逻辑的,不认为有语法。它给出了正确的回答,hackernet仍然说它不正确,所以我来这里是想看看是否有人能看到问题所在 public static void main(String[] args) { int N = scanner.nextInt();

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

  • 如果n为奇数,则打印为奇数
  • 如果n为偶数且在2到5的范围内,则打印不奇怪
  • 如果n为偶数且在6到20的范围内,请打印
  • 如果n为偶数且大于20,则打印不奇怪
我确信代码是有逻辑的,不认为有语法。它给出了正确的回答,hackernet仍然说它不正确,所以我来这里是想看看是否有人能看到问题所在

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");
    }
}
publicstaticvoidmain(字符串[]args)
{
int N=scanner.nextInt();
scanner.skip(“(\r\n |[\n\r\u2028\u2029\u0085])”;

如果(N%2!=0 | | N%2==0&&N>=6&&N则问题在于
else
条件中的逻辑,这也会捕获小于2的
N
值。请尝试此版本:

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");
}
if(N%2!=0)
{
系统输出打印(“怪异”);
}
否则如果(N>=2&&N 20)
{
系统输出打印(“不奇怪”);
}
否则,如果(N>=6&&N你可以试试这个

 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();
        }
专用静态最终扫描仪=新扫描仪(System.in);
公共静态void main(字符串[]args){
int n=scanner.nextInt();
scanner.skip(“(\r\n |[\n\r\u2028\u2029\u0085])”;
如果(n%2==1 | |(n>=6&&n读取此条件:

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

如果(N%2!=0 | | N%2==0&&N>=6&&N=6&&N请检查以下选项

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

    }
publicstaticvoidmain(字符串[]args)
{
int N=scanner.nextInt();
scanner.skip(“(\r\n |[\n\r\u2028\u2029\u0085])”;
如果(N%2!=0){
系统输出打印(“怪异”);
}否则如果(N>=2&&N=6&&N20){
系统输出打印(“不奇怪”);
}
}

对于技术部分:从阅读开始,然后使代码更易于阅读

将这么多的条件推到一个if中是没有帮助的。你自己看到了:你认为代码是正确的,但可能不是。现在你指望其他人向你解释你过于复杂的代码。当然,所有其他答案都对你有帮助……但除此之外:

这里的“真正”答案是:学习如何测试代码

不要让main以某种方式请求一个数字,然后做出决定,而是编写一个方法
boolean isword()
,根据您的要求获取一个数字并返回true/false

然后简单地用所有合理的案例测试该方法,然后检查结果是否符合预期

使用JUnit,您可以编写如下内容

 assertThat(isWeird(1), true);
 assertThat(isWeird(21), true);
 assertThat(isWeird(22), true);
 ...

理想情况下,在实现该方法之前编写此类测试。然后实现所有条件,任何失败的检查都会告诉您出了问题。

我觉得,在if中(N%2!=0 | | N%2==0&&N>=6&&N=6&&N这里您已经有了一些答案,但是如果您从逻辑上考虑您实际需要什么,您可以更容易地将其分解

看起来唯一的
“不奇怪”
打印输出是
2
4
和偶数
>20

例如:

if (n % 2 == 0) {
    if ((n >= 2 && n <= 5) || (n > 20)) {
        return "Not Weird";
    }
}
return "Weird";
if(n%2==0){
如果((n>=2&&n 20)){
返回“不奇怪”;
}
}
返回“怪异”;

请学习正确的缩进。它使您的代码更容易阅读。我这次为您修复了它。
扫描仪
在哪里声明和初始化?hackernet是否隐藏了这些东西或其他东西?而不是“分组”.Operator Priority!尽管如此,我还是投了我的票,因为我只是懒得把所有必要的括号都放在这里……同意,我想用非常天真的术语来解释。:)新手本身就够天真的了。成长的一部分是学习重要的词汇;-)回答很好。我不想做他的工作,但有一个有能力的人给出一个好的解决方案总是很好。实际上我现在正在开会,但我宁愿在堆栈溢出上:-P
if (n % 2 == 0) {
    if ((n >= 2 && n <= 5) || (n > 20)) {
        return "Not Weird";
    }
}
return "Weird";