2014-09-18 51 views
0

我想讓用戶輸入兩個數字,如果輸入了無效字符,我希望程序要求用戶再次輸入一個數字。爲什麼我的做法不正確?爲什麼這個循環直到輸入一個整數纔會查找輸入?

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

回答

0

以下意味着你​​要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

1
} while(goodInput = false); 

是歸因於=而不是==。因此,循環條件始終評估爲false,循環不會繼續。

您可以使病情:

} while (goodInput == false); 

其內容 「而goodInput是假的」

} while (goodInput != true); 

其內容 「而goodInput是不是真正的」

} while (!goodInput); 

,內容爲「while not goodInput」

最後一個對於Java程序員來說通常是慣用的,並且是首選。

相關問題