当前位置: 首页 > 知识库问答 >
问题:

1/8测试用例失败的简单if/else问题

谢哲瀚
2023-03-14

简单的If-Else问题,请建议:

我的目标如下:

“给定整数n,执行以下条件操作:

如果n为奇数,则打印“怪异”

如果n为偶数,并且在2到5的包含范围内,则打印“不奇怪”

如果n为偶数并且在6到20的包含范围内,则打印“怪异”

如果n为偶数且大于20,则打印“不怪异”。

完成后,我使用的一个网站会自动检查涉及到这个问题的所有8个测试用例,其中有1个是我不正确的,其他的都是正确的。

测试用例如下:

输入(stdin)=29

输出(stdout)=不奇怪

预期输出=怪异

这就是我到目前为止所做的工作:

import java.util.regex.*;

public class Solution {



    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 == 0 & N >= 2 & N <= 5){
            System.out.println("Not Weird");
        } else if (N >= 6 & N <= 20){
            System.out.println("Weird");
        } else if (N > 20){
            System.out.println("Not Weird");
        } else {
            System.out.println("Weird");
        }

        scanner.close();
    }
}

有什么我错过的吗??

共有1个答案

危飞文
2023-03-14

您的代码使用了一个if/else if块链,这意味着4个“缩进”的system.out行中只有一个可以运行。

所以,就…。做程序员做的事。调试此代码。如果必须的话,拿出一支笔,“在脑子里”运行这段代码。

假设N是21。这是奇怪的,所以,这是‘怪异',它应该就这样结束了。

所以让我们来了解一下:

n所有这些内容:

  • 偶数(n%2==0)
  • 2个或更多
  • 5或5以下

显然不是,所以接下来是第二个条件。

N是6或更多20或更少吗?不,继续到第三个。

N大于20吗?是的,所以not weird被打印出来,就是这样。

好了,答错了。

我可以给你写正确的答案,但你的目标大概是学东西。您可能需要考虑为什么在编写代码时决定将问题描述翻过来。为什么问题描述以‘如果它是奇怪的,那么答案是奇怪的,没有例外’开头,而您的代码却以一个完全不同的情况(偶数和2到5之间)开头?

结束语:

>

  • 您对扫描器的“跳过”调用很奇怪,不需要。您需要的是,在制作完一个扫描器之后,立即运行scanner.usedelimiter(“\\r”),它用一个简单得多的字母覆盖了这个巨大的球,实际上可以执行您想要的操作。

    &&在双方都是布尔人时的应用:这基本上是一回事;唯一的变化是使用&时,代码“快捷方式”--如果答案已经很清楚,从左到右,那么就不会计算更多的表达式。这并不意味着什么,除非计算表达式有副作用。例如,如果您有:public boolean foo(){system.out.println(“eval”);},则false&foo()将打印eval,而false&foo()不会;false表示无论foo()做什么,'and'都是false。换句话说,&&是“正确的”,因为这是Java程序员的编写方式,而且它“更有效”,但实际效果在您的特定代码中没有意义,所以这不会破坏或使您的算法:)

  •  类似资料:
    • 我想学习如何编写JUnit测试,但我完全失败了。 这是我的测试: 问题是这个简单的断言已经失败了。返回的列表是空的。我知道,我对这一切都不熟悉,但是从我的角度来看,失败是如此出乎意料,以至于我没有办法解决这个问题。 以下是全部代码(不太多): 要测试的功能就是这个,我知道它是有效的: 实际上,我只是想学习如何编写这样的测试,但是几天来我一直没有写出来。有相当多的例子和解释,但是不管我做什么尝试,我

    • 我不熟悉匕首。我创建了一个非常简单的单元测试,试图理解我应该如何使用dagger。不幸的是,它失败了。我可能还不了解匕首的一些基本原理。 而我的测试课失败了 我认为dagger会将B注入A,因为A希望注入B,DaggerModule包含一个@Providers注释方法,该方法创建B。 更新: 我发现当我像这样编写模块类时 将B注入A作品中。然而,我不理解为什么当模块有一个构造a实例的带注释的方法时

    • 本文向大家介绍对vue v-if v-else-if v-else 的简单使用详解,包括了对vue v-if v-else-if v-else 的简单使用详解的使用技巧和注意事项,需要的朋友参考一下 首先vue.js请注意 2.1.0版本以上方可使用v-else-if 页面展示如下: vue.js下载:https://github.com/vuejs/vue 以上这篇对vue v-if v-els

    • 我有一个简单的测试用例: FileManager中的函数删除 /myDir下的所有文件,然后再次保留文件。 如上所述,我有一个。运行时,我可以按以下顺序查看所有打印: 但是,测试在失败。有两件事我不明白: > 我不明白,它在中失败了,为什么我仍然可以看到打印的,听起来就像是失败了,它没有停止运行,而是继续运行下一个测试?JUnit测试用例中的场景背后发生了什么?? 我不明白的另一件事是为什么tes

    • 这是我的问题代码 假设a=1,b=2,c=3,...,z=26的值。您将得到一个数字字符串S。 编写一个程序,返回可以从给定字符串生成的所有可能代码的列表。

    • Perl条件语句有助于决策,这需要程序员指定一个或多个要由程序评估或测试的条件,以及在条件被确定为真时要执行的一个或多个语句,以及可选的其他条件如果确定条件为假,则执行语句。 以下是大多数编程语言中的典型决策结构的一般性 - 数字0,字符串'0'和“”,空列表()和undef在布尔上下文中都是false ,所有其他值都为true 。 否定真正的价值! 或not返回特殊的假值。 Perl编程语言提供