2013-10-01 11 views
0

좋아요, 그래서 여러 값을 스택에 넣지 않는 프로젝트를하고 있기 때문에 중복을 검사하는 방법에 대한 개념이 있습니다. 지금까지 내 코드는 표준이며 스캐너를 문자열로 저장하고 문자열을 배열에 저장 한 다음이 while 루프를 저장합니다.While 루프에서 중복 문자를 확인하십시오.

int c=0; 
    while(counter < inAr.length) 
    { 
    String w1 = inAr[c]; 
    String w2 = inAr[c + 1]; 
    if(w1 != w2) 
    { 
     counter++; 
     so.push(inAr[c]); 
     c++; 
     temp++; 
    } 
    else 
    { 
     counter++; 
     c++; 
    } 
    } 

그래, 문제가 있습니다. inAr [c + 1]에 대해 arrayindexoutofbounds를 얻고 있습니다. 그러나 얻을 수없는 것은 inAr [1], inAr [2] 등 모든 보류 값입니다. [1]과 같은 상수로 [c + 1]을 대체하면 프로그램이 정상적으로 작동하고 ... 작동하지 않게됩니다. 아무도 도움을 청할 수 없으므로

+4

'ArrayIndexOutOfBoundsException'은 무엇을 의미한다고 생각하십니까? –

+0

카운터는 무엇으로 초기화됩니까? – fvrghl

+2

왜 "중복 된 문자"에 대해 이야기하고 있지만 '문자열'* 참조 *를 비교하고 있습니까? – Holger

답변

3

c = inAr.length-1.

inAr[c+1] 정말 경계에서 항상 inAr[inAr.length]입니다

이 시점에서 우리는 ( c로하고 counter 0으로 초기화를 가정하고, 각 반복에 같은 값이) 당신의 while 루프를 입력합니다.

수정 : while(counter < inAr.length - 1)로 루프를 변경하거나 1

편집에 카운터를 초기화 : 당신은 또한 == 또는 !=로 문자열을 비교해서는 안된다. 귀하의 경우 문은 다음과 같아야합니다

if(!w1.equals(w2)) 

그러나 이것은 단지 나중에 문제가 발생할 수 있습니다, 실제 문제와 관련이 없습니다.

0

예를 들어 배열 밖으로 요소에 액세스하려고한다는 뜻입니다. 배열 길이가 10이고 인덱스 11에 액세스하려고 시도하고 있습니다.

+2

또는 길이가 10 인 배열에 0-9의 인덱스가 있으므로 인덱스 10에 액세스하려고 시도하는 경우 (이는 초보자에게 흔한 혼동입니다). – kevinsa5

0

코드가 루프의 시작 부분에서 중단되지 않고 루프의 끝 부분에서 중단됩니다.

c 항상 조건이 선택되어, 결국, counterinArr.length 동일 할 때 counter 동일 - inArr.length

와 동일합니다 (1) 및 c + 1 배열은 항상 인덱스 0 (대신 1)에서 시작하기 때문에,

mystr = inAr[inArr.length] 

의 마지막 반복이 수행되는 동안 실제로 수행중인 예외가 항상 발생합니다.루프.