2011-11-26 197 views
1

我是新來的Java。我希望能夠在掃描儀中輸入操作字符。字符使用掃描儀

我的代碼應該產生以下,

  1. 輸入兩個數字:13 6
  2. 什麼操作? *
  3. 什麼是13 * 6? 78
  4. 正確!

我使用switch語句來存儲可用於用戶的操作。 這些是:+, - ,*和/。

我收到一個運行時間錯誤,每次我輸出後寫操作。

import java.util.Scanner; 

public class Användardialog4 { 
    public static void main(String[]args){ 
     Scanner sc = new Scanner(System.in); 

    int svar; 
    String op; 
    char operator; 

    System.out.println("Enter two numbers: "); 
    int tal = sc.nextInt(); 
    int tal2 = sc.nextInt(); 

    System.out.println("Operation?"); 
    op = sc.nextLine(); 
    operator = op.charAt(0); 

    switch(operator){ 
    case '+': 
     System.out.println("What is "+tal+" + "+tal2); 
     svar = sc.nextInt(); 
     if (svar == tal+tal2) 
      System.out.println("Correct!"); 
     else 
      System.out.println("Wrong - The right answer is: "+tal+tal2); 
     break; 
    case '*': 
     System.out.println("What is "+tal+" * "+tal2); 
     svar = sc.nextInt(); 
     if (svar ==tal*tal2) 
      System.out.println("Correct!"); 
     else 
      System.out.println("Wrong - The right answer is: "+tal*tal2); 
     break; 
    case '-': 
     System.out.println("What is "+tal+" - "+tal2); 
     svar = sc.nextInt(); 
     if (svar == tal-tal2) 
      System.out.println("Correct!"); 
     else 
      System.out.println("Wrong - The right answer is: "+(tal-tal2)); 
     break; 
    case '/': 
     System.out.println("What is "+tal+"/"+tal2); 
     svar = sc.nextInt(); 
     if (svar == tal/tal2) 
      System.out.println("Correct!"); 
     else 
      System.out.println("Wrong - The right answer is: "+tal/tal2); 
     break; 
    } 
} 
} 

運行時間錯誤我得到的是:

Exception in thread "main" java.util.InputMismatchException at 
java.util.Scanner.throwFor(Unknown Source) at 
java.util.Scanner.next(Unknown Source) at 
java.util.Scanner.nextInt(Unknown Source) at 
java.util.Scanner.nextInt(Unknown Source) at 
Användardialog4.main(Dialog4.java:16) 

所以我的問題是,我怎麼在Scanner類使用字符? 是不是有nextChar();或者類似於Java的東西?

+1

這不是一個編譯器錯誤,這是一個運行時異常。看起來問題是你要求一個int並且它看到的下一個標記不是int。 – Kevin

+0

不是迴應,只是旁觀:如果您使用的是Java 5+,我建議使用「枚舉」來提供操作功能。它會更整潔。 – DPM

回答

1

變化op = sc.nextLine();op = sc.next();

public String next();查找並返回來自此掃描器的下一個完整標記。由於你的操作只有一個令牌/角色,這是要走的路。

public String nextLine();此掃描器執行當前行,並返回跳過的輸入信息。由於您的流中沒有末尾字符,因此失敗。

0
int ans; 
switch(operator){ 
    case '+': 
     ans = tal + tal2; 
     break; 
    case '*': 
     ans = tal * tal2; 
     break; 
    case '-': 
     ans = tal - tal2; 
     break; 
    case '/': 
     ans = tal/tal2; 
     break; 
    } 
    System.out.println("What is "+tal+operator+tal2+"?"); 
    svar = sc.nextInt(); 
    if (svar == ans) 
     System.out.println("Correct!"); 
    else 
     System.out.println("Wrong - The right answer is: "+ans); 

代碼質量改進的小改動。刪除了多餘的代碼。

+0

謝謝!這很有幫助。 – Racket

+0

歡迎您.. –

+0

雖然有一個問題,在if語句中「ans」真的可以訪問嗎?考慮到它在switch語句中的事實。我用類似的方法編寫了一個代碼,但它不起作用。 – Racket