好的,所以我正在尝试创建一个命令行计算器,它会检测您是否尝试使用String.contains方法添加/减去/乘/除。乘法和除法工作得很好,但是当我尝试添加或减去时,它会吐出一堆错误。有人可以告诉我我做错了什么吗?
import java.util.Scanner;
public class CalculatorCode {
public static void main(String[] args) {
while(true){
Scanner input = new Scanner(System.in);
String userinput = input.nextLine();
if(userinput.contains("x")){
String[] multiply = userinput.split("x");
String multiply1 = multiply[0];
String multiply2 = multiply[1];
double a = Double.parseDouble(multiply1);
double b = Double.parseDouble(multiply2);
double multoutput = a * b;
System.out.println(a + "x" + b + "=" + multoutput);
}
if(userinput.contains("/")){
String[] divide = userinput.split("/");
String divide1 = divide[0];
String divide2 = divide[1];
double c = Double.parseDouble(divide1);
double d = Double.parseDouble(divide2);
double divideoutput = c/d;
System.out.println(c + "/" + d + "=" + divideoutput);
}
if(userinput.contains("-")){
String[] subtract = userinput.split("-");
String subtract1 = subtract[1];
String subtract2 = subtract[2];
double e = Double.parseDouble(subtract1);
double f = Double.parseDouble(subtract2);
double suboutput = e - f;
System.out.println(e + "-" + f + "=" + suboutput);
}
if(userinput.contains("+")){
String[] add = userinput.split("+");
String add1 = add[1];
String add2 = add[2];
double g = Double.parseDouble(add1);
double h = Double.parseDouble(add2);
double addoutput = g - h;
System.out.println(g + "-" + h + "=" + addoutput);
}
}
}
}
添加错误:
Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0 + ^ at java.util.regex.Pattern.error(Pattern.java:1713) at java.util.regex.Pattern.sequence(Pattern.java:1878) at java.util.regex.Pattern.expr(Pattern.java:1752) at java.util.regex.Pattern.compile(Pattern.java:1460) at java.util.regex.Pattern.(Pattern.java:1133) at java.util.regex.Pattern.compile(Pattern.java:823) at java.lang.String.split(String.java:2292) at java.lang.String.split(String.java:2334) at CalculatorCode.main(CalculatorCode.java:36)
减法错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 at CalculatorCode.main(CalculatorCode.java:29)
答案 0 :(得分:2)
请将您的代码更改为以下。您错误地使用了数组索引。
import java.util.Scanner;
public class CalculatorCode {
public static void main(String[] args) {
while(true){
Scanner input = new Scanner(System.in);
String userinput = input.nextLine();
if(userinput.contains("x")){
String[] multiply = userinput.split("x");
String multiply1 = multiply[0];
String multiply2 = multiply[1];
double a = Double.parseDouble(multiply1);
double b = Double.parseDouble(multiply2);
double multoutput = a * b;
System.out.println(a + "x" + b + "=" + multoutput);
}
if(userinput.contains("/")){
String[] divide = userinput.split("/");
String divide1 = divide[0];
String divide2 = divide[1];
double c = Double.parseDouble(divide1);
double d = Double.parseDouble(divide2);
double divideoutput = c/d;
System.out.println(c + "/" + d + "=" + divideoutput);
}
if(userinput.contains("-")){
String[] subtract = userinput.split("\\-");
String subtract1 = subtract[0];
String subtract2 = subtract[1];
double e = Double.parseDouble(subtract1);
double f = Double.parseDouble(subtract2);
double suboutput = e - f;
System.out.println(e + "-" + f + "=" + suboutput);
}
if(userinput.contains("+")){
String[] add = userinput.split("\\+");
String add1 = add[0];
String add2 = add[1];
double g = Double.parseDouble(add1);
double h = Double.parseDouble(add2);
double addoutput = g + h;
System.out.println(g + "+" + h + "=" + addoutput);
}
}
}
}
答案 1 :(得分:2)
在添加和减去
中检查这一行String add1 = add[1];
String add2 = add[2];
数组索引从0开始
从你的帖子中查看其他乘法和除法语句我假设你传递了3个字符
这就是为什么你得到java.lang.ArrayIndexOutOfBoundsException
试试这个
String add1 = add[0];
String add2 = add[1];
类似于减法使用此
String subtract1 = subtract[0];
String subtract2 = subtract[1];
更改上面两行之后,您的完整代码就像这样
import java.util.Scanner;
public class CalculatorCode {
public static void main(String[] args) {
while(true){
Scanner input = new Scanner(System.in);
String userinput = input.nextLine();
if(userinput.contains("x")){
String[] multiply = userinput.split("x");
String multiply1 = multiply[0];
String multiply2 = multiply[1];
double a = Double.parseDouble(multiply1);
double b = Double.parseDouble(multiply2);
double multoutput = a * b;
System.out.println(a + "x" + b + "=" + multoutput);
}
if(userinput.contains("/")){
String[] divide = userinput.split("/");
String divide1 = divide[0];
String divide2 = divide[1];
double c = Double.parseDouble(divide1);
double d = Double.parseDouble(divide2);
double divideoutput = c/d;
System.out.println(c + "/" + d + "=" + divideoutput);
}
if(userinput.contains("-")){
String[] subtract = userinput.split("-");
String subtract1 = subtract[0];
String subtract2 = subtract[1];
double e = Double.parseDouble(subtract1);
double f = Double.parseDouble(subtract2);
double suboutput = e - f;
System.out.println(e + "-" + f + "=" + suboutput);
}
if(userinput.contains("+")){
String[] add = userinput.split("+");
String add1 = add[0];
String add2 = add[1];
double g = Double.parseDouble(add1);
double h = Double.parseDouble(add2);
double addoutput = g - h;
System.out.println(g + "-" + h + "=" + addoutput);
}
}
}
}
请使用嵌套if else
以提高效率。可以this帮助您了解更多信息
另外,正如其他答案所示,您需要转义-
和+
答案 2 :(得分:2)
- 此处的问题是+
和-
等特殊符号。
- 您需要使用escape characters
来消除这些错误。
<强>例如强>
使用\\
前缀
\\+ and \\-
答案 3 :(得分:1)
Because the + character is a special character in regular expressions.
您需要在+
的通话中转义split()
。请注意,您需要两个反斜杠,因为单个反斜杠用于转义序列,例如换行符和制表符。
示例:
String[] add = userinput.split("\\+");
答案 4 :(得分:1)
字符(如+, - )用于正则表达式模式,因此您可以获得悬空元字符异常。相反,您可以尝试使用StringTokenizer。例如,在您添加的情况下: -
if(userinput.contains("+")){
StringTokenizer st = new StringTokenizer(userinput, "+");
double addedNumber = 0;
while(st.hasMoreTokens()){
String add = st.nextToken();
addedNumber = addedNumber+Double.parseDouble(add);
}
System.out.println("Your result is:- "+addedNumber);
}
答案 5 :(得分:1)
您正在使用:
String add1 = add[1];
String add2 = add[2];
// and
String subtract1 = subtract[1];
String subtract2 = subtract[2];
但你应该使用(就像乘法/除法一样):
String add1 = add[0];
String add2 = add[1];
// and
String subtract1 = subtract[0];
String subtract2 = subtract[1];
另外,这些行:
double addoutput = g - h;
System.out.println(g + "-" + h + "=" + addoutput);
用于添加,因此您应将其更改为:
double addoutput = g + h;
System.out.println(g + "+" + h + "=" + addoutput);
最后,+
是一个特殊字符,需要使用\\
所以你需要改变这个:
String[] add = userinput.split("+");
到此:
String[] add = userinput.split("\\+");
答案 6 :(得分:0)
使用try catch块查找问题的确切位置。 我猜问题可能是由于输入中的空格或终止字符。像“2 + 3”或“2 + 3 \ 0”而不是“2 + 3”
数组索引从0开始。我想你知道的。 :)