从键盘输入如下格式(如3.4+4.3,运算符可以是+-*/,操作数可以是小数或整数)的字符串,首先对输入字符串进行格式检查,当不符合要求的时候,提示用户重新输入,直到格式正确 然后对表达式求解,输出求解结果 如输入1.2+3.4 输出:1.2+3.4=4.6Java代码
时间: 2024-09-29 08:04:30 浏览: 9
在Java中,你可以使用`java.util.Scanner`类从键盘获取用户输入,然后通过正则表达式检查输入是否符合数学表达式的格式。下面是一个简单的示例代码:
```java
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MathExpressionParser {
private static final String NUMBER_PATTERN = "(\\d+(\\.\\d+)?)";
private static final String OPERATOR_PATTERN = "[+\\-*/]";
private static final Pattern EXPRESSION_PATTERN = Pattern.compile(NUMBER_PATTERN + "|" + OPERATOR_PATTERN + "?" + NUMBER_PATTERN);
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请输入一个符合格式的表达式(如1.2+3.4):");
String input = scanner.nextLine();
// 检查输入格式
Matcher matcher = EXPRESSION_PATTERN.matcher(input);
if (!matcher.matches()) {
System.out.println("输入格式错误,请重新输入!");
continue;
}
double leftNum = parseNumber(matcher.group(1));
double rightNum = parseNumber(matcher.group(2));
char operator = input.charAt(input.length() - 1); // 获取最后一个字符作为运算符
try {
double result = calculate(leftNum, rightNum, operator);
System.out.printf("%.2f %c %.2f = %.2f%n", leftNum, operator, rightNum, result);
break; // 输入格式正确,退出循环
} catch (ArithmeticException e) {
System.out.println("计算错误,请重新输入正确的表达式!");
}
}
scanner.close();
}
private static double parseNumber(String str) {
return Double.parseDouble(str.replace(".", ""));
}
private static double calculate(double num1, double num2, char op) {
switch (op) {
case '+':
return num1 + num2;
case '-':
return num1 - num2;
case '*':
return num1 * num2;
case '/':
if (num2 != 0)
return num1 / num2;
else
throw new ArithmeticException("除数不能为零");
default:
throw new IllegalArgumentException("未知的运算符");
}
}
}
```
这个代码片段首先定义了一个正则表达式模式来匹配数字、运算符和可能的点。然后它会不断地从用户那里获取输入,如果输入不符合要求,就给出提示并继续。一旦得到一个有效的表达式,它会解析数字,计算结果,并将其打印出来。
注意,此代码假设除法操作不会处理浮点数精度问题,如果你需要更精确的结果,可能需要考虑使用`BigDecimal`类进行计算。此外,对于非法运算符(如 `^`),这里简单地抛出异常,实际应用中可能需要提供更友好的错误处理。