1

可能遗漏了一些非常愚蠢的东西,但我的 while 循环不会停止打印错误消息。

有人可以快速浏览一下并指出正确的方向吗?

package week5;

import java.util.*;
public class Week5 {       
    public static void main(String[] args) {    
        Scanner myKeyboard = new Scanner(System.in);        
        inputInt();        
    }

    public static int inputInt(){        
        Scanner myKeyboard = new Scanner(System.in);        
        System.out.println("Enter number:");        
        int num;                                
        boolean carryOn = true;                       
        while (carryOn = true) {                 
                {                                    
                  try {                       
                      num = myKeyboard.nextInt();                      
                      carryOn = false;                                                                  
                      }                  
                  catch (Exception e) {
                    System.out.println ("Integers only");                                         
                   }                       
                  }                                                    
          }
        return 0;
      }
4

3 回答 3

5

这条线是问题

    while (carryOn = true) {

==您使用的是赋值运算符,而不是使用比较运算符=。所以本质上,你设置carryOntrue每次迭代,然后自动运行循环体,因为条件基本上变成了

    while (true) {

只需将该问题行更改为

    while (carryOn == true) {
于 2013-11-04T14:03:55.400 回答
1

除了无限循环和return 0;不管用户输入什么你总是这样的事实之外,代码远比它需要的复杂得多。

// only create one scanner
private static final Scanner myKeyboard = new Scanner(System.in); 

public static void main(String[] args) {
    int num = inputInt();
    // do something with num
}

public static int inputInt() {
    System.out.println("Enter number:");

    while (true) { 
        if (myKeyboard.hasNextInt()) {
            int num = myKeyboard.nextInt();
            myKeyboard.nextLine(); // discard the rest of the line.
            return num;
        }
        System.out.println ("Integers only, please try again"); 
    }
}
于 2013-11-04T14:09:31.647 回答
0

在你的情况下:

     while(carryOn==true) 

或者

     while(carryOn) 

会解决你的问题

于 2013-11-04T14:05:33.700 回答