为什么加法/减法符号字符串拆分不起作用?

时间:2014-01-03 06:05:36

标签: java arrays calculator

好的,所以我正在尝试创建一个命令行计算器,它会检测您是否尝试使用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)

7 个答案:

答案 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开始。我想你知道的。 :)