1

我在一种方法上遇到了麻烦。在输入中,我们有字符串,例如 (a+-b*i)some sign(c+-d*i)。程序必须计算这个并输出结果。我需要在第一个括号中获取符号索引,在第二个括号中获取索引。而且我的程序将起作用。但是,仅在输入 (ab*i)-(cd*i) 或 (ab*i)*(cd*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。为什么?

4

2 回答 2

4

发生这种情况是因为在表达式中:

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

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

然后你知道为什么str.lastIndexOf("+")会是-1。当然是 < str.indexOf(")")

所以sign1将是-1。

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

if(str.indexOf("+")!= -1 && str.indexOf("+") < str.indexOf(")"))
于 2013-04-16T12:06:21.773 回答
1

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

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

首先在此方法中,如果您正在检查 '+' ,因此它不存在,它的索引为 -1,小于 str.indexOf(")")索引,因此它的返回-1

于 2013-04-16T12:10:03.860 回答