2013-04-16 6 views
1

한 가지 방법으로 문제가 있습니다. 입력에는 문자열 (예 : (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)

첫 번째 방법 2. 왜 -1을 반환하는 것이 아니라?

답변

4

표현에 있기 때문에이 문제가 발생 :

(1-2i)*(3-4i) 어떤 + 문자를 가지고 있지 않으며, String#lastIndexOf을 본 후에 :

문자 시퀀스에서 문자의 마지막 항목의 인덱스 이 객체가 나타내는 또는 문자가 이 아닌 경우 -1이 발생합니다.

그러면 str.lastIndexOf("+")이 -1이되는 이유를 알 수 있습니다. 그리고 물론 그것은 < str.indexOf(")")입니다.

따라서 sign1은 -1이됩니다.

다음과 같은 방법으로 문제를 해결할 수 있습니다 : 입력 (a-b*i)-(c-d*i)를 들어

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

대단히 감사합니다. 나는 그것을 잊어 버린다. – rustock

1

, 여기에이 캐릭터에는 '+'가 없다. 첫번째 방법에있어서

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

는 '+'검사하는 경우, 따라서 그것의 인덱스는이 -1 returing을보다 적게 str.indexOf(")") 인덱스가 -1 없다.