0

我希望用户使用以下变量之一输入数学方程:*、/、+、-

输入示例(无空格):2*2、35.7/3、4.5+5.5

然后我想将第一个数字、char 变量和第二个数字分开并将它们存储到单独的变量中。

当我使用此代码时:

import java.io.*;
import java.util.Scanner;

class Extra {
    public static void main (String[] args) throws IOException {

        double fnum, snum;
        char operator;

        System.out.println("Type Operation.");
        Scanner s = new Scanner ( System.in );

        fnum = s.nextDouble();
        operator = s.next().charAt(fnum + 1);
        snum = s.nextDouble();

        System.out.println(fnum);
        System.out.println(snum);
        System.out.println(operator);

        s.close();
    }
}

我收到此错误/响应:

Type Operation.
2*2

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 Extra.main(Extra.java:24)

我真的很想使用这样的东西:

operator = s.next("[*,/,+,-]").charAt(fnum + 1);

请帮忙,我不知道我做错了什么。

4

1 回答 1

1

nextDouble读取直到下一个空格。由于您将整个输入指定为没有任何空格的给定,因此它会失败(例如,因为2*2它不是有效值Double)。

如果您不想要任何空格,您可以简单地阅读整行然后解析它:

public static void main(String[] args) {
    double fnum, snum;
    char operator;

    System.out.println("Type Operation.");
    Scanner s = new Scanner ( System.in );

    String str = s.nextLine();
    String[] arr = str.split("[*/+-]");
    fnum = Double.parseDouble(arr[0]);
    snum = Double.parseDouble(arr[1]);
    operator = str.charAt(arr[0].length());

    System.out.println(fnum);
    System.out.println(snum);
    System.out.println(operator);

    s.close();

}

请注意,它split需要一个正则表达式,因此它基本上采用输入字符串并根据运算符的任何出现(如您的问题中所定义)将其拆分。如果输入有效,则结果将是一个包含两个双精度值的数组。

当然,用输入有效性检查包装这些是个好主意。

于 2016-01-10T07:28:55.290 回答