某些测试中的输出错误

时间:2013-04-16 11:55:34

标签: java string math

我在一种方法中遇到麻烦。在输入中我们有字符串,例如(a + -b * i)某个符号(c + -d * i)。程序必须计算此结果并输出结果。我需要在第一个括号中取符号索引,在第二个括号中取索引。而且我的计划将会有效。但是,当仅在输入(a-b * i) - (c-d * i)或(a-b * i)*(c-d * i)时,方法返回错误的结果-1。

我的方法有两个括号。

public int getSign1(String str)
    {
        int sign1;
        if(str.indexOf("+") < str.indexOf(")")) 
            sign1 = str.indexOf("+"); 
        else if(str.indexOf("-", 2) < str.indexOf(")")) 
            sign1 = str.indexOf("-", 2);
        else sign1 = -1; 

        return sign1;
    }

    public int getSign2(String str)
    {
        int sign2;
        if(str.lastIndexOf("+") > str.lastIndexOf("(")) 
            sign2 = str.lastIndexOf("+");
        else if(str.lastIndexOf("-") > str.lastIndexOf("(")) 
            sign2 = str.lastIndexOf("-");
        else sign2 = -1;

        return sign2;
    }

第二种方法总是有效,但不是第一种方法(请帮我查找错误)。

示例:(1-2i)*(3-4i)

第一种方法是返回-1,但不是2.为什么?

2 个答案:

答案 0 :(得分:4)

这是因为在表达式中:

(1-2i)*(3-4i)您没有+个字符,并在看到String#lastIndexOf之后:

  

字符中最后一次出现的字符的索引   此对象表示的序列,,如果字符不是,则为-1   发生

然后你知道为什么str.lastIndexOf("+")将为-1。它当然&lt; str.indexOf(")")

所以sign1将为-1。

你可以通过以下方式修复它:

if(str.indexOf("+")!= -1 && str.indexOf("+") < str.indexOf(")"))

答案 1 :(得分:1)

对于输入(a-b*i)-(c-d*i),此字符串中没有“+”。

public int getSign1(String str){
     if(str.indexOf("+") < str.indexOf(")")) 
                sign1 = str.indexOf("+");
..
}

首先,如果你检查'+',那么首先它不存在,它的索引是-1,它小于str.indexOf(")")索引,所以它的回归-1