当我启动我的UI时,我收到错误导致此代码在标题中向我吐出错误。它适用于我所有其他运算符符号,所以我真的不确定这里发生了什么。我不想发布所有代码,这样如果我的gitHub上的内容不够,我就可以找到其他代码:https://github.com/jparr721/Calculator-App/tree/master/src/calculator
public class Calculation_Controls {
public double A, B;
private String[] operators = new String[] {"-","+","/","*","x","^","X"};
/**
* Check for the symbol being used within the TextArea to then
* apply the correct caculation method.
* FIXME - Allow for multiple symbols to be used and have them return
* FIXME - a result in accordance with PEMDAS
*
*@param nums
*
* @return operator, or error
*/
public String findSymbol(String nums) {
for (String operator : operators) {
if (nums.contains(operator)) {
return operator;
}
}
return "invalid input";
}
/**
* Input method to take the user input from the text area
* and apply the correct calculation to it
*
* @param nums - Stores the input as a String which I then convert to an int
* then back to a string to be printed to the TextArea
*
* @return - The result of the calculation as a string
*/
public String input(String nums){
String operator = findSymbol(nums);
if (operator == null){
System.out.println("Invalid input");
}
String[] split = nums.split(operator);
int left = Integer.parseInt(split[0]);
int right = Integer.parseInt((split[1]));
String result = "";
switch (operator){
case "+":
result = Double.toString(add(left, right));
break;
case "-":
result = Double.toString(subtract(left, right));
break;
case "*":
case "x":
case "X":
result = Double.toString(multiply(left, right));
break;
case "/":
result = Double.toString(divide(left, right));
break;
case "^":
result = Double.toString(pwr(left, right));
break;
default:
System.out.println("Invalid Operator");
}
return result;
}
答案 0 :(得分:23)
正则表达式中有保留字符,你应该将这些角色视为实现你想要的。例如,您无法使用String.split("+")
,必须使用String.split("\\+")
。
正确的运算符是:
String[] operators = new String[] {"-","\\+","/","\\*","x","\\^","X"};
答案 1 :(得分:3)
在您的情况下+
*
和^
被视为具有特殊含义,通常称为元字符。 String.split()
方法将正则表达式作为参数,并返回String
数组。为避免将上述内容视为元字符,您需要在代码中使用这些转义序列"\\+"
"\\*"
"\\^"
像这样修改你的运算符数组
private String[] operators = new String[] {"-","\\+","/","\\*","x","\\^","X"};
更多信息请参阅这些链接regex.Pattern和String.split()
答案 2 :(得分:1)
split()方法使用正则表达式。 '+'符号是正则表达式中的特殊字符,因此您需要使用反斜杠符号('\')将其转义。但是你还需要在java中转义反斜杠符号,所以你需要两个反斜杠,例如: “\\ +”
答案 3 :(得分:0)
更改:String[] split = nums.split(operator);
对此:String[] split = nums.split("\\" + operator);
编辑:这只适用于标准运算符,而不适用于x或X.您必须实际更改String[] operators
声明,就像上面提到的其他答案一样。就个人而言,我会进行某种输入验证,并在x
或X
上执行replace()而不是*
答案 4 :(得分:-1)
您可以使用 case String.valueOf('+');