2010-12-20 238 views
0

举个我想要使用此代码阐述的想法是这样的:在阵列节省运营商,错误

  1. 输入两个数字:10 7
  2. 选择运营商:如(+, - ,*和/)
  3. 什么是10 * 7?
  4. 正确!

    int[] arr = new int[5]; 
    
    
    System.out.println("enter two numbers: "); 
    arr[1] = sc.nextInt(); 
    arr[2] = sc.nextInt(); 
    
    
    System.out.println("Choose Operator: "); 
    arr[3] = sc.nextInt(); 
    
    
    int operator = arr[1]+arr[3]+arr[2]; 
    
    
    System.out.print("what's "+operator); 
    int svar = sc.nextInt(); 
    
    
    if (svar == operator) 
        System.out.println("Correct!"); 
    else 
        System.out.println("Wrong - the right answer is "+operator);  
    

现在我有这个代码中运行的一些方面的问题。它工作正常,编译但每次程序要求为“选择运营商”具有以下错误编译回应:

  • 异常线程“main”
    • java.util.InputMismatchException在在
    • java.util.Scanner.next
    • java.util.Scanner.throwFor(未知
    • 源)(未知
    • 源)在
    • java.util.Scanner.nextInt(未知
    • 源)在
    • java.util.Scanner.nextInt(未知
    • 源)
    • 在test1.main(TEST1。 Java的:13)

我知道我该怎么去处理这一个。但目标是“保存”所需的操作符,然后将它与arr [1]和arr [2](在int运算符中显示)放在一起,以“排序”创建整个数学运算。 但是,当我选择一个特定的操作符时发生错误。

我希望得到这个帮助。谢谢!

+0

您正在尝试用sc.nextInt()读取一个字符。这听起来不对。 – sjngm 2010-12-20 14:49:13

+0

你觉得'System.out.print(“什么是”+运算符)'行可以打印? – SLaks 2010-12-20 14:52:53

+0

号码,运营商,号码。举个例子:10 * 10 – Racket 2010-12-20 15:13:01

回答

1

首先,您试图互换使用int s和String,这在强类型语言(例如Java)中是不可能的。其次,对于这种计算器应用程序,您应该使用堆栈。为了最简单的实现,为操作员提供一个数字堆栈和一个堆栈。

1

你打电话给nextInt,它试图读取一个整数。
由于您未输入整数,因此出现错误。

要实现您的想法,您需要一个Operator接口与int execute(int x, iny y)方法,并为每个运算符分别设置一个类。
然后,您会从sc中读取一个字符,并找到该字符的相应实现Operator。 (也许使用一个Map<String, Operator>

+0

这几天你可能想使用'java.util.function.BinaryOperator'等。如果你打算用Java来做这件事。 – OrangeDog 2016-06-17 12:58:32

0

这里

System.out.println("Choose Operator: "); 
    arr[3] = sc.nextInt(); 

你想存储一个“+”操作符为int,也许你应该读行,然后决定如何处理在输入读做。

+0

好的,我尝试nextLine,但它说它不能将字符串转换为int。所以这也行不通。 – Racket 2010-12-20 15:14:50

0

所有你需要的是两个整数,一个字符和一个双,如果不是使用数组,所以这是对你的代码必须:

int num1, num2; 
double result; 
char op; 

System.out.println("enter two numbers: "); 
num1 = sc.nextInt(); 
num2 = sc.nextInt(); 

System.out.println("Choose Operator: "); 
op = System.in.read(); // Edited 

switch (op) 
{ 
    case '+': res = num1 + num2; break; 
    case '-': res = num1 - num2; break;   
    case '/': res = num1/num2; break; 
    case '*': res = num1 * num2; break; 
}  

System.out.print("what's " + num1 + op + num2); 

if (sc.nextInt() == res) 
    System.out.println("Correct!"); 
else 
    System.out.println("Wrong - the right answer is " + res);  

享受, Rotem公司

+0

嗨!非常感谢。虽然我不确定关于“op = sc.nextChar”的说法。 Eclipse不知道它是什么,它想要将其更改为nextInt(); – Racket 2010-12-20 15:59:48

+0

呵呵Eclipse是正确的=)它应该是“op = sc.nextLine()”,没有nextChar方法(我刚刚阅读Scanner API - http://download.oracle.com/javase/1.5.0/docs /api/java/util/Scanner.html)现在都很好! B.T.W它也可以使用System.in.read()来获取单个字符.. – Rotem 2010-12-20 22:14:01