gpt4 book ai didi

java - 制作一个单弦线计算器

转载 作者:行者123 更新时间:2023-12-01 18:27:20 25 4
gpt4 key购买 nike

现在我正在制作一个单字符串计算器,学习正则表达式,我有一些问题。

对于 2 个数字,如:2 + 2,输出将是 4,但如果我尝试输入 3 个数字:2 + 2 + 2,输出将是 4,忽略第三个数字,但我要尽管操作数.length。

另一个,如果我尝试将第一个数字设置为负数,例如:- 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,它会给我一个错误,有人吗?

关于java - 制作一个单弦线计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60211430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com