断言异常消息未显示

时间:2021-04-17 15:46:01

标签: java assertion

嗨,我目前正在做一项作业,我必须检查居民密码是否与门密码匹配,我必须给用户三次尝试,然后使用 assert 来显示告诉用户尝试再次。这是我的代码,但断言没有显示任何消息。

public static void main(String[] args) throws Exception {
    // write your code here
    Scanner s = new Scanner(System.in);
    String P, pas;
    int i = 0;
    while (i <= 2) {
        System.out.println("Enter Resident Password: ");
        pas = s.next();
        System.out.println("Enter Door Password: ");
        P = s.next();
        Resident r = new Resident("XYZ", pas);
        Door d = new Door(P);
        Dorm D = new Dorm();
        D.Check();
        if (Resident.getPassword().equals(Door.getPassword())) {
            System.exit(0);
        } else {
            i++;
        }
    }
    assert i>2 : "Serious Error – Program has been terminated Try again later";
}

我应该怎么做才能使用断言获取消息。

2 个答案:

答案 0 :(得分:0)

来自https://docs.oracle.com/javase/8/docs/technotes/guides/language/assert.html#enable-disable

<块引用>

默认情况下,断言在运行时被禁用。两个命令行开关允许您有选择地启用或禁用断言。要以各种粒度启用断言,请使用 -enableassertions-ea 开关

答案 1 :(得分:0)

assert 发送错误消息的方式是使用确保条件在您想要的情况下失败。例如:

assert <condition> : <message-if-condition-is-false>;

因此,如果您更改断言以使用:

assert i<=2 : "Serious Error – Program has been terminated Try again later";

你扔了 if i is still <=2。如果条件失败,则消息将作为 AssertionError 抛出。

因此,如果我将其执行为:

javac Example.java
java -ea Example

并给出所需的错误输入,您会得到:

Exception in thread "main" java.lang.AssertionError: Serious Error, Program has been terminated Try again later

无论如何,您可以选择使用 System.err 并输出错误消息:

public static void main(String[] args) throws Exception {
    // Write your code here
    Scanner s = new Scanner(System.in);
    String P, pas;
    int i = 0;
    while (i <= 2) {
        System.out.println("Enter Resident Password: ");
        pas = s.next();

        System.out.println("Enter Door Password: ");
        P = s.next();

        Resident r = new Resident("XYZ", pas);
        Door d = new Door(P);
        Dorm D = new Dorm();
        D.Check();

        if (Resident.getPassword().equals(Door.getPassword())) {
            System.exit(0);
        } else {
            i++;
        }
    }
    // This need not be verified with if (i>2) because the System.exit(0); will exit if the condition satisfies
    System.err.println("Serious Error – Program has been terminated Try again later");
}