嗨,我目前正在做一项作业,我必须检查居民密码是否与门密码匹配,我必须给用户三次尝试,然后使用 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";
}
我应该怎么做才能使用断言获取消息。
答案 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");
}