抱歉,我对Java还很陌生,所以这个问题可能不太清楚。
最近我一直在处理将try和catch语句放入while循环中的问题,因为我想确保获取输入被封闭在程序的其余部分之外。
我遇到了一个问题,在while条件中使用变量前面的感叹号(例如while(!done)),而不是使用= false(例如while(done = false)),会改变我的程序运行方式。
前者(!done)会按预期运行try和except语句。
后者(done = false)则不会,只是跳过它们并继续执行代码的下一部分。
我原本认为在变量前加上感叹号意味着与var = false相同。
我错了吗?
以下是一个例子:
import java.util.Scanner;
public class TestOne {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
int num;
boolean inputDone = false;
while (!inputDone) {
try {
System.out.print("Enter in a number here: ");
num = input.nextInt();
inputDone = true;
}
catch (Exception e) {
System.out.println(e);
System.exit(0);
}
}
System.out.println("Success!");
}
}
目前,编译和运行程序都很顺利:它会提示我输入一个数字,输入字母或非常长的数字会导致打印出异常类型并退出。输入正常数字会导致打印Success!
另一方面,如果我将!inputDone替换为inputDone = false,则在运行程序时仅会打印出Success!
有人能向我解释while循环中!和= false语句之间的区别吗?
lvalue == false
的原因。 - Pete Kirkham