Java中的循环问题

时间:2010-06-15 08:03:42

标签: java

以下代码中的错误是什么?

 while ((char t==(char) System.in.read())!='0')

4 个答案:

答案 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

但是,某些公司的指南不允许在布尔表达式中改变运算符,例如读取和赋值,并且希望将它们分成几行。我个人认为限制范围更重要。