为什么这个循环直到输入一个整数才会查找输入?

为什么这个循环直到输入一个整数才会查找输入?

问题描述:

我想让用户输入两个数字,如果输入了无效字符,我希望程序要求用户再次输入一个数字。为什么我的做法不正确?为什么这个循环直到输入一个整数才会查找输入?

import java.util.InputMismatchException; 
import java.util.Scanner; 

public class Calculator { 
    public static void main(String args[]) { 
     Scanner input = new Scanner(System.in); 
     double answer = 0; 
     boolean goodInput = false; 
     do { 
      try{ 
       System.out.println("Enter your first number:"); 
       double firstNum = input.nextDouble(); 
       System.out.println("Enter your second number:"); 
       double secondNum = input.nextDouble(); 
       System.out.println("Which operation would you like to use?"); 
       System.out.println("For addition,   type add"); 
       System.out.println("For subtraction,  type subtract"); 
       System.out.println("For divison,   type divide"); 
       System.out.println("For multiplication, type multiply"); 
       String operation = input.next(); 
       goodInput = true; 

       if (operation.equals("add")) { 
        answer = firstNum + secondNum; 
        System.out.println(firstNum + " + " + secondNum + " = "+ answer); 
       } 
       if (operation.equals("subtract")) { 
        answer = firstNum - secondNum; 
        System.out.println(firstNum + " - " + secondNum + " = "+ answer); 
       } 
       if (operation.equals("divide")) { 
        answer = firstNum/secondNum; 
        System.out.println(firstNum + "/" + secondNum + " = "+ answer); 
       } 
       if (operation.equals("multiply")) { 
        answer = firstNum * secondNum; 
        System.out.println(firstNum + " x " + secondNum + " = "+ answer); 
       } 
      }catch(InputMismatchException e) { 
       System.out.println("Thats not a number, enter a number:"); 
      } 
     }while(goodInput = false); 
    } 

} 
+0

您在这里为'goodInput'赋值新值:'goodInput = false'而不是'!goodInput' – Multithreader 2014-09-18 23:19:10

以下意味着你​​要goodInput分配错误,然后整个表达式得到evaluted为false

所以 变化

}while(goodInput = false); 

}while(!goodInput); 
+0

这个工作,但现在我的捕获无限地打印出来,我怎样才能打印一次!? – AlecR 2014-09-18 23:34:18

+0

这意味着你对循环的每次迭代都有一个例外,你想要给用户什么行为? – 2014-09-18 23:35:34

+0

我不确定我是否完全理解你的问题,但我希望用户输入一个int,如果发现不匹配异常,它应该输出tellinh用户输入一个数字 – AlecR 2014-09-18 23:44:40

} while(goodInput = false); 

是归因于=而不是==。因此,循环条件始终评估为false,循环不会继续。

您可以使病情:

} while (goodInput == false); 

其内容 “而goodInput是假的”

} while (goodInput != true); 

其内容 “而goodInput是不是真正的”

} while (!goodInput); 

,内容为“while not goodInput”

最后一个对于Java程序员来说通常是惯用的,并且是首选。