2011-11-26 109 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