以下代码中的错误是什么?
while ((char t==(char) System.in.read())!='0')
答案 0 :(得分:8)
您无法在while
循环中声明新变量。
while (boolean always = true) {
} // DOES NOT COMPILE!!!
你必须在循环之前和之外声明变量,所以可能是这样的:
boolean always = true;
while (always) {
break;
} // compiles fine!
// always is still in scope after the loop!
always = !always;
从这个意义上说,for
循环是唯一的:事实上,您可以声明一个新的局部变量,其范围仅限于该循环:
for (boolean always = true; always; ) {
break;
} // compiles fine!
// always is no longer declared after the loop!
always = !always; // DOES NOT COMPILE!
那说,看看你在做什么,你可能想看看java.util.Scanner
。我怀疑它会更好地满足您的需求。
以下是使用Scanner
从标准输入读取数字的示例,终止于0.然后打印这些数字的总和。它使用hasNextInt()
而不是Integer.parseInt
/ NumberFormatException
来优雅地处理无效输入。
Scanner sc = new Scanner(System.in);
System.out.println("Enter numbers (0 to end):");
int sum = 0;
int number;
do {
while (!sc.hasNextInt()) {
System.out.println("I'm sorry, that's not a number! Try again!");
sc.next();
}
number = sc.nextInt();
sum += number;
} while (number != 0);
System.out.println("The sum of those numbers is " + sum);
这是一个示例会话:
Enter numbers (0 to end):
1
3
-1
five
I'm sorry, that's not a number! Try again!
2
0
The sum of those numbers is 5
答案 1 :(得分:7)
这可能是你打算写的。
char t;
while ((t = (char) System.in.read()) != '0') {
//...
}
答案 2 :(得分:6)
while ((char t==(char) System.in.read())!='0')
// ^^ should be 'char t = ...'
这个循环可以更清楚地重写为
while (true) {
char t = (char) System.in.read();
if (t == '0')
break;
...
答案 3 :(得分:3)
char t
是一个声明变量而不是表达式的语句;没有值与==
运算符进行比较。你可能也想使用赋值而不是相等,但与C ++不同,声明没有值。
在循环中限制变量范围的最简单方法是使用for
代替,这特别允许您声明变量。
for (char t; ( t = (char) System.in.read() ) != '0'; )
// loop body involving t
但是,某些公司的指南不允许在布尔表达式中改变运算符,例如读取和赋值,并且希望将它们分成几行。我个人认为限制范围更重要。