2013-05-27 82 views
4

所以我試圖在java中做一個簡單的計算器,但不知道如何獲得輸入的操作。該程序要求兩個號碼,然後要求操作員。一切正常,當我運行它,直到我到操作類型。編譯器只是跳過它,甚至不讓我輸入任何內容。任何線索?爲什麼我可以爲我的手術輸入任何東西?

Scanner keyboard = new Scanner(System.in); 

double x; 
double y; 
double sum =0; 
double minus =0; 
double times =0; 
double divide =0; 
double nCr =0; 
String Op; 

System.out.print("X: "); 
x = keyboard.nextDouble(); 
System.out.print("Y: "); 
y = keyboard.nextDouble(); 
System.out.print("Op: "); 
Op = keyboard.nextLine(); 
+0

請原諒'a'和'b'。我已將它切換爲'x'和'y',因此它匹配 – Squash

+1

請參閱:http://stackoverflow.com/questions/5032356/using-scanner-nextline – maybeWeCouldStealAVan

+0

[在nextXXX之後使用nextLine時發生掃描問題](http ://stackoverflow.com/questions/7056749/scanner-issue-when-using-nextline-after-nextxxx) –

回答

2

嘗試:

System.out.print("X: "); 
x = Double.parseDouble(keyboard.nextLine()); 
System.out.print("Y: "); 
y = Double.parseDouble(keyboard.nextLine()); 
System.out.print("Op: "); 
op = keyboard.nextLine(); 

這將解析您輸入的信息Double數量和讀取回車。

如果你想差錯控制(如果用戶輸入一個字符串,而不是數字的):

Boolean check = true; 

do 
{ 
    try 
    { 
     //The code to read numbers 
    } 
    catch(InputMismatchException e) 
    { 
     System.err.println("Please enter a number!"); 
     check = false; 
    } 
} 
while(check == false) 
+0

非常感謝你!它有效,但我不清楚它爲什麼。解析到底是做什麼的? – Squash

+0

'keyBoard.nextLine()'將讀取輸入爲'String',然後'Double.parseDouble'將嘗試將'String'解析爲'Double'。如果它不能解析它,每當用戶輸入非數字的東西時(例如:用戶輸入'Hello'),它將拋出'InputMismatchException'。 – Jhon

0

基本上nextDouble不能識別回車符。每個nextDouble後使用nextLine

1

而不是

Op = keyboard.nextLine(); 

嘗試使用

Op = keyboard.next(); 

看起來像nextLine();方法在使用nextInt(),nextDouble()等方法調用時會出現問題。

觀察:如果nextLine()被單獨調用,則不會發生。

相關問題