java - 制作一个字符串行计算器
问题描述
现在我正在制作一个单串计算器,学习正则表达式,我有一些问题。
使用 2 个数字,例如:2 + 2,输出将是 4,但如果我尝试输入 3 个数字:2 + 2 + 2,则输出将为 4,忽略第三个数字,但我会通过操作数。长度。
另一个,如果我尝试将第一个数字设为负数,例如:- 2 + 2,它会给我一个错误:线程“main”中的异常 java.lang.NumberFormatException:对于输入字符串:“”。
String[] 运算符 = input.split("\s*-?\w+\s*"); 没有真正的工作,但为什么?
Scanner scanner = new Scanner(System.in);
while (true) {
String input = scanner.nextLine();
boolean ifExit = false;
boolean ifHelp = false;
boolean ifEmpty = false;
boolean ifOneNumber = false;
String[] operators = input.split("\\s*\\w+\\s*");
String[] operands = input.split("\\s*[+-]+\\s*");
int result = 0;
if (operands[0].matches("/exit")) {
ifExit = true;
System.out.println("Bye!");
break;
} else if (operands[0].matches("/help")) {
ifHelp = true;
System.out.println("The program calculates the sum of numbers");
} else if (operands[0].matches("")) {
ifEmpty = true;
} else if (operands[0].matches("[0-9]+") && operands.length == 1) {
ifOneNumber = true;
result += Integer.parseInt(operands[0]);
System.out.println(result);
}
for (int i = 1; i < operands.length; i++) {
result = Integer.parseInt(operands[0]);
if (operators[i].matches("[+]")) {
allBooleansAreFalse(ifHelp, ifEmpty, ifOneNumber);
result += Integer.parseInt(operands[i]);
} else if (operators[i].matches("[-]")){
allBooleansAreFalse(ifHelp, ifEmpty, ifOneNumber);
result -= Integer.parseInt(operands[i]);
} else if (operators[i].matches("[+]{2,1000}")) {
allBooleansAreFalse(ifHelp, ifEmpty, ifOneNumber);
result += Integer.parseInt(operands[i]);
} else if (operators[i].matches("[-]{2}")) {
allBooleansAreFalse(ifHelp, ifEmpty, ifOneNumber);
result += Integer.parseInt(operands[i]);
} else if (operators[i].matches("[-]{3}")) {
allBooleansAreFalse(ifHelp, ifEmpty, ifOneNumber);
result -= Integer.parseInt(operands[i]);
}
}
if (ifExit == true) {
break;
} else if (ifExit == false && ifHelp == false && ifEmpty == false && ifOneNumber == false) {
System.out.println(result);
}
}
}
public static void allBooleansAreFalse(boolean ifHelp, boolean ifEmpty, boolean ifOneNumber) {
ifHelp = false;
ifEmpty = false;
ifOneNumber = false;
}
解决方案
我通过在 for 循环之前添加此代码来解决第一个问题:
else if (operands[0].matches("[0-9]")) {
result = Integer.parseInt(operands[0]);
}
并在 for 循环中删除此代码:
result = Integer.parseInt(operands[0]);
现在我需要解决负数的问题,如果第一个数字是负数:-2 + 2 它会给我一个错误,有人吗?
推荐阅读
- postgresql - 用户名包含@符号时的pg转储
- python-3.x - 如何添加按钮发送功能
- msix - 启动时 MSIX 更新失败并显示“无法安装,因为需要关闭以下应用程序”
- sql - 在查询中使用嵌套变量的 SQL 迭代和发送电子邮件
- production-environment - SaaS 中的生产数据和应用程序隔离
- reactjs - 如何从钩子中使用 .then 模拟函数
- python - Python:numpy行的一般总和
- json - 解析 JSON 时出错:输入中有多个文档(Redshift 到 Snowflake SQL)
- azure-data-factory - 如何创建 Azure 数据工厂直到检查 API 是否返回状态值的活动?
- ios - SwiftUI 视图混合了 UIViewController 的视图