gpt4 book ai didi

java - 解析字符串以忽略空格时出错,计算器类

转载 作者:行者123 更新时间:2023-11-30 11:16:05 28 4
gpt4 key购买 nike

我正在学习 Java,并且一直在编写计算器类(class)。目前,它仅设计用于对两个数字进行简单操作,例如2 + 2。这是我的一小部分代码:

public static void start()
{
System.out.println("Calculator. Type \"exit\" to quit.");
System.out.print("> ");

Scanner scan = new Scanner(System.in);
String entry = scan.nextLine();

while (! (entry.equals("exit")))
{
String [] values = entry.replaceAll("(^\\s+|\\s+$)", "").split("\\s+");

num1 = new Double(values[0]);
operand = values[1];
num2 = new Double(values[2]);
...
}
...
}
...

在此之后是一个 switch 语句,它是 while 循环的一部分。 switch 语句测试 operand 的值,调用适当的方法,打印结果,然后重新启动 while 循环。

我自己没有编写正则表达式部分的代码,但通过阅读以前的 StackOverlfow 帖子,我了解到它会忽略我想要的值之前、中间和之后的任何空白字符。

代码工作正常,除非空白字符不分隔 num1operandnum2

例如:

> 2 + 2

4.0

>2 + 2

4.0

但是:

>2+2

Exception in thread "main" java.lang.NumberFormatException: For input string: "2+2"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1250)
at java.lang.Double.valueOf(Double.java:504)
at java.lang.Double.<init>(Double.java:597)
at calc.Calc.start(Calc.java:24)
at calc.CalcClient.main(CalcClient.java:8)
Java Result: 1

并且:

>2+ 2

Exception in thread "main" java.lang.NumberFormatException: For input string: "2+"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1250)
at java.lang.Double.valueOf(Double.java:504)
at java.lang.Double.<init>(Double.java:597)
at calc.Calc.start(Calc.java:24)
at calc.CalcClient.main(CalcClient.java:8)
Java Result: 1

并且:

>2 +2

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at calc.Calc.start(Calc.java:26)
at calc.CalcClient.main(CalcClient.java:8)
Java Result: 1

我的错误在哪里?是数组问题、我解析字符串的方式问题还是其他问题?我想对其进行编码,以便用户可以输入他们想要的空格,或者根本没有空格。

感谢您的帮助!

最佳答案

答案作为示例提供:

    // extract the operands and operator
String[] operandsArrStr = "22+ 2".replaceAll("\\s+", "").split("[\\+\\-\\/\\*]"); // {"22", "2"}
String operator = "22+ 2".replaceAll("(\\s+|\\d+|\\.)", ""); // "+"

// convert the values to doubles
Double[] operands = new Double[operandsArrStr.length];
for (int i=0; i < operandsArrStr.length; i++) {
operands[i] = new Double(operandsArrStr[i]);
}

Double res = null;
// calc
if ("+".equals(operator)) {
res = operands[0] + operands[1]; // assuming only two operands and one operator!
}
else if ("-".equals(operator)) {
res = operands[0] - operands[1];
}
else if ("/".equals(operator)) {
res = operands[0] / operands[1];
}
else if ("*".equals(operator)) {
res = operands[0] * operands[1];
}
System.out.println("res = " + res); // prints 24.0

关于java - 解析字符串以忽略空格时出错,计算器类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25070059/

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