繁体   English   中英

Java不会使用Scanner和System.in分解具有多个double和char变量的用户输入

[英]java won't break up a user input with multiple double and char variables using Scanner and System.in

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

输入示例(不带空格):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);

请帮助,我不知道我在做什么错。

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期望使用正则表达式,因此它基本上采用输入字符串,并根据出现的任何运算符(如您的问题中所定义的那样)对它进行分割。 如果输入有效,则结果将是具有两个double值的数组。

当然,用输入有效性检查将它们包装起来是一个好主意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM