我正在尝试创建一个基本的计算器(Java新手)。此时用户必须输入一个号码,然后是操作员,然后输入一个号码。如何在一条线上获得所有三个输入?
import java.util.Scanner;
import java.io.*;
public class Calculator
{
public static void main(String[] args)
{
Scanner in = new Scanner (System.in);
double numb1, numb2, add, subtract, multiply, divide;
char operation;
while (true)
{
System.out.println("Calculate: ");
numb1 = in.nextDouble();
operation = in.next().charAt(0);
numb2 = in.nextDouble();
switch(operation)
{
case '+':
add = numb1 + numb2;
System.out.println(add);
break;
case '-':
subtract = numb1 - numb2;
System.out.println(subtract);
break;
case '*':
multiply = numb1 * numb2;
System.out.println(multiply);
break;
case '/':
divide = numb1 / numb2;
System.out.println(divide);
break;
}
}
}
}
答案 0 :(得分:0)
您可以尝试使用nextLine()
(返回String
),然后按空格拆分,最后将它们转换为相应的类型:
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
double numb1, numb2;
char operation;
// Split string by space
String[] parts = scanner.nextLine().split(" ");
// Convert to corresponding types
numb1 = Integer.parseInt(parts[0]);
operation = parts[1].charAt(0);
numb2 = Integer.parseInt(parts[2]);
...
}
所以输入必须是:
1 + 2
在运营商之间有空格
答案 1 :(得分:0)
哦,计算器 - 真正的经典!
您可以通过调用Scanner
让nextDouble()
课程给您完整的句子,而不只是下一个数字。
您已经在表达式in.next().charAt(0)
中执行此操作。
然而,由此产生的问题是,现在你有一整个文本句子,实际上是一个数学术语。如何将这个句子分成反映数学术语的结构是Parser的作品。
这通常是一项非常重要的事情,但根据您需要完成的任务,您可能不需要在这里完整的解析器。如果您坚持使用两个数字上的单个操作的示例,则可以使用正则表达式来提取信息。 对于没有小数的非负数,您可以使用:
Pattern termPattern = Pattern.compile("\\s*(\\d*)\\s*([+-*/])\\s*(\\d*)\\s*");
final String sentence = in.next();
Matcher matcher = termPattern.matcher(sentence );
if (!matcher.matches()) {
throw new IllegalArgumentException("Not a supported mathematical expression: " + sentence);
}
Integer firstNum = Integer.valueOf(matcher.group(1));
Integer secondNum = Integer.valueOf(matcher.group(3));
String operation = matcher.group(2);
switch (operation) {
...
}
我使用正则表达式使用Java Pattern Class从String
中提取信息。
然而,虽然这是常见的事情,但请注意,正则表达式在所有情况下都不能取代Parser(遗憾的是它经常尝试)。
根据您需要使用计算器,它可能符合要求。
这个解决方案还远远不够完美,但它支持一系列输入,并且可以在某种程度上进行调整。您可以轻松添加负值或小数值。但是,如果您尝试使用(
和)
添加更复杂的表达式,则会达到其限制。祝你好运!