Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 输入两种类型的答案_Java_Input_Java.util.scanner - Fatal编程技术网

Java 输入两种类型的答案

Java 输入两种类型的答案,java,input,java.util.scanner,Java,Input,Java.util.scanner,我正在设计一个简单的计算器。有一些限制,用户可以输入5*5或5*5。我不知道怎么做 到目前为止,我的代码是 Scanner kb = new Scanner(System.in); System.out.println("Enter what you want to calculate"); String line = kb.nextLine(); Scanner scan = new Scanner(line); int number1 = scan.nextInt(); int number

我正在设计一个简单的计算器。有一些限制,用户可以输入
5*5
5*5
。我不知道怎么做

到目前为止,我的代码是

Scanner kb = new Scanner(System.in);
System.out.println("Enter what you want to calculate");
String line = kb.nextLine();
Scanner scan = new Scanner(line);
int number1 = scan.nextInt();
int number2  = scan.nextInt();
char operator = scan.next().charAt(0);
问题是,以这种特定的方式,如果他们不输入(
2
*
)系统崩溃。我必须修改什么,以便他们也可以输入
2*2

此代码:

int number1 = scan.nextInt();
int number2  = scan.nextInt();
char operator = scan.next().charAt(0);
表示“期望输入的第二部分为整数;如果不是整数,则表示存在错误”

有两种方法可以解决此问题:

1) 编写查看第二项的代码,确定它是整数还是符号,然后继续

2) 或者,您可以处理错误。在可能抛出错误的调用周围放置一个try catch,然后以不同的方式处理输入

int number2;
char operator;
try {
    number2  = scan.nextInt();
    operator = scan.next().charAt(0);
    // process the input in this order
    ...
} catch (NumberFormatException e) {
    // process the input in another order
    ...
}

获取数据行后,您可以转换整数,并根据需要执行操作。如果用户输入了正确的格式输入,则可以使用以下代码检查可能的格式并打印值

    int number1 = -1;
    int number2 = -1;
    char operator = ' ';
    Scanner kb = new Scanner(System.in);
    System.out.println("Enter what you want to calculate");

    String line = kb.nextLine();
    String[] pieces = line.split("\\s+");
    boolean parsedInput = true;

    if(pieces.length == 3)
    {
        number1 = pieces[0].matches("\\d+") ? Integer.parseInt(pieces[0]) : Integer.MAX_VALUE;
        number2 = pieces[1].matches("\\d+") ? Integer.parseInt(pieces[1]) : (pieces[2].matches("\\d+") ? Integer.parseInt(pieces[2]) : Integer.MAX_VALUE);
        operator = pieces[1].matches("\\*|\\-|\\+") ? pieces[1].charAt(0) : (pieces[2].matches("\\*|\\-|\\+") ? pieces[2].charAt(0) : ' ');
        if(operator == ' ' || number1 == Integer.MAX_VALUE || number2 == Integer.MAX_VALUE)
            parsedInput = false;
    }

    if(parsedInput)
        System.out.println("Number 1: " + number1 + ", Number 2: " + number2 + ", Operator: " + operator);
    else
        System.out.println("Failed to parse: " + line);

您始终可以使用
scan.hasNextInt()
检查第二个令牌是否为int。但这仍然无法避免像
123code>这样的输入。要处理这种情况,您可以在整行中使用正则表达式,查看它是否匹配编号符号或编号符号编号。非常感谢!!我还没有学过正则表达式,但我会自己看一看。还有,我应该在那里做些什么,这样它就可以对^和/.进行操作了。在那一个它只做+,-,*没关系,我能够理解它并修复它!
    int number1 = -1;
    int number2 = -1;
    char operator = ' ';
    Scanner kb = new Scanner(System.in);
    System.out.println("Enter what you want to calculate");

    String line = kb.nextLine();
    String[] pieces = line.split("\\s+");
    boolean parsedInput = true;

    if(pieces.length == 3)
    {
        number1 = pieces[0].matches("\\d+") ? Integer.parseInt(pieces[0]) : Integer.MAX_VALUE;
        number2 = pieces[1].matches("\\d+") ? Integer.parseInt(pieces[1]) : (pieces[2].matches("\\d+") ? Integer.parseInt(pieces[2]) : Integer.MAX_VALUE);
        operator = pieces[1].matches("\\*|\\-|\\+") ? pieces[1].charAt(0) : (pieces[2].matches("\\*|\\-|\\+") ? pieces[2].charAt(0) : ' ');
        if(operator == ' ' || number1 == Integer.MAX_VALUE || number2 == Integer.MAX_VALUE)
            parsedInput = false;
    }

    if(parsedInput)
        System.out.println("Number 1: " + number1 + ", Number 2: " + number2 + ", Operator: " + operator);
    else
        System.out.println("Failed to parse: " + line);