1

1つの方法で問題があります。入力には、(a+-b*i)some sign(c+-d*i) などの文字列があります。プログラムはこれを計算し、結果を出力する必要があります。最初のブラケットで符号のインデックスを取得し、2 番目のブラケットでインデックスを取得する必要があります。そして、私のプログラムが機能するよりも。ただし、入力 (ab*i)-(cd*i) または (ab*i)*(cd*i) のみの場合、メソッドは間違った結果 -1 を返します。

2 つの括弧に対する私の方法。

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;
    }

2番目の方法は常に機能しますが、最初の方法は機能しません(エラーを見つけるのを手伝ってください)。

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

最初のメソッドは -1 を返しますが、2 を返しません。なぜですか?

4

2 に答える 2

4

これは、次の式で発生します。

(1-2i)*(3-4i)+charがなく、 String#lastIndexOfを見た後:

このオブジェクトによって表される文字シーケンス内で文字が最後に出現するインデックス、または文字が出現しない場合は -1

次に、なぜstr.lastIndexOf("+")-1になるかがわかります。もちろん < str.indexOf(")")です。

-1sign1になります。

次の方法で修正できます。

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