【问题标题】:java won't break up a user input with multiple double and char variables using Scanner and System.injava 不会使用 Scanner 和 System.in 分解具有多个 double 和 char 变量的用户输入
【发布时间】:2016-04-14 16:05:07
【问题描述】:

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

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

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

【问题讨论】:

  • 读取整行作为输入字符串,然后解析它。

标签: java input char java.util.scanner system.in


【解决方案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 需要一个正则表达式,因此它基本上采用输入字符串并根据任何出现的运算符(如您的问题中所定义)将其拆分。如果输入有效,则结果将是一个包含两个双精度值的数组。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    相关资源
    最近更新 更多