2012-02-12 3 views
-1

안녕하세요 코드를 입력하면 표현식을 입력 할 때 배열에 저장되지만 내 문제는 입력식이 ab + c와 같은 경우 어떻게 * 두 변수 사이에 넣을 수 있습니까? 값. 그것은 마지막 stack 배열의 인덱스와 동일 할 때까지 k를 증가하기 때문에부울 식 AND 게이트 Java

stack = strexp.toCharArray();  
for (int k = 0; k < stack.length; k++) { 
    if (Character.isLetter(stack[k]) && Character.isLetter(stack[k+1])){ 
    temp[k] = stack[k]; 
    temp[k+1] = '*'; 
    temp[k+2] = stack[k+1]; 
    } 
} 
+5

이것은 실제로 쓰여진 것처럼 분명하지 않습니다. 또한 숙제입니까? –

+0

선생님, 코드를 실행할 때 nullpointerexception을 말하는 오류가 있습니다. 예를 들어 입력 된 표현식은 ab + c입니다. 이 표현식이 배열에 저장되면 a * b + c가됩니다. 숙제 선생님이 아닙니다. – steph22

답변

2

당신은, ArrayIndexOutOfBounds 예외가 발생한다 다음 stack[k+1]에 액세스하려고 : 여기 내 코드입니다.

루프 식

for (int k = 0; k < (stack.length-1); k++) 

NullPointerException의 원인을 직접 볼 수 없습니다이어야하지만 난 당신이 temp 배열을 초기화하지 않은 것으로 생각합니다. 크기가 정확한지 모르기 때문에 가능성이 큽니다.

내가의 StringBuilder 대신 목록에 결과를 저장하는 것 :

StringBuilder resultBuilder = new StringBuilder(); 
for (int k = 0; k < (stack.length-1); k++) { 
    resultBuilder.append(stack[k]); 
    if (Character.isLetter(stack[k]) && Character.isLetter(stack[k+1])) { 
    resultBuilder.append('*'); 
    } 
} 
resultBuilder.append(stack[stack.length-1]); // don't forget the last element 
+2

나는'ArrayList' 대신'StringBuilder'를 사용할 것을 제안하고자합니다. –

+0

그래, 고마워, StringBuilder! 나는 그것을 1 분 안에 바꿀 것이다! –

+0

고마워요, 선생님. – steph22

0

2 문제가 있습니다

1) NPE - temp[]

2 intializing에 의해 해결 될 것입니다) ArrayIndexOutOfBoundsException at Character.isLetter(stack[k + 1])

둘 다 해결하려면이 코드를 사용하십시오.

String strexp = "ab+c"; 
    char[] stack = strexp.toCharArray(); 
    for (int k = 0; k < stack.length - 1; k++) 
    { 
     if (Character.isLetter(stack[k]) && Character.isLetter(stack[k + 1])) 
     { 
      char temp[] = new char[3]; 
      temp[k] = stack[k]; 
      temp[k + 1] = '*'; 
      temp[k + 2] = stack[k + 1]; 
     } 
    }