2013-01-11 2 views
0

arraylist의 첫 번째 요소와 나머지 요소를 비교하려고합니다.arraylist를 사용하여 순열을 수행하는 방법

그런 다음 arraylist의 두 번째 요소를 나머지 요소와 비교하여
arraylist의 끝까지 비교합니다.

코드는 아래와 같다 :

ArrayList<String> a = new ArrayList<String>(); 

    a.add("G1"); 
    a.add("G2"); 
    a.add("G3"); 
    a.add("G1"); 

    System.out.println(a.size()); 

    for(int i = 0; i<a.size(); i++){ 

     for(int j = 0; j<a.size(); j++){ 

     if(a.get(i) == a.get(j)) 
      System.out.println("Element: " + a.get(i)+ " at " + i + " and " + "Element: "+ a.get(j)+ " at " + j); 

     } 





    } 
+1

'String.equals()'메서드를 사용하여 문자열을 비교하십시오. – Smit

+0

어디서 문제가 발생합니까? – Smit

+1

문제는 1 번 요소와 2 번 요소를 검사하지만 이후에는 0 번 요소와 1 번 요소를 검사하므로 동일한 요소를 두 번 비교하면 안됩니다. –

답변

0

사용

if((a.get(i)).equals(a.get(j))) 

대신

if(a.get(i) == a.get(j)) 

의 Morover 당신은 이미이 이전 문자열을 다시 시작할 필요를 체크 한 j = i+1 당신의 초기화를 시작합니다.

편집 당신은 그것을 늘 그 자체로 매우 마지막 요소를 확인할 수 있도록 i<a.size()-1로 외부 루프를 제한해야

.

나는이 도움이되기를 바랍니다. 더 이상 도움이 필요하면 그냥 물어보십시오.

+0

고마워, 또 다른 문제는 모든 요소는 내가 이것을 어떻게 달성 할 수 있는지에 대한 한 번만 확인해야한다는 것이다. // 0 \t \t a.add ("G2"); // 1 \t \t a.add ("G3"), 예를 들어 배열의 내용 a.add ("G1")라면; // 2 \t \t a.add ("G1"); // 3 \t \t a.// 4 \t \t a.add ("G2"), // 5 \t \t a.add ("G3") ("G2")을 추가 \t \t \t // 6 \t \t } –

+0

@SandeepJohal 답변을 업데이트했습니다. 당신이 이미 언급 한 문제는 다른 사람들의 대답에 이미 기술되어 있습니다. – Smit

+0

@SandeepJohal 귀하의 질문에 대해 오해 한 것 같습니다. 나는 그것을 얻지 않았다. 귀하의 질문에 그 편집을 할 수 있으며, 당신이 그것을 할 때 알려주십시오. – Smit

1

==가 기준 평등이다 (예를 들어,이 두 물체가 동일한 메모리 위치를 가리 않음). 객체가 같으면 .equals()을 대신 사용하십시오.

1

너 대신이 코드를 사용하십시오.

for(int i = 0; i<a.size()-1; i++){ 

    for(int j = i+1; j<a.size(); j++){ 

    if(a.get(i).equals(a.get(j))) 
     System.out.println("Element: " + a.get(i)+ " at " + i + " and " + "Element: "+ a.get(j)+ " at " + j); 

    } 

도움이되기를 바랍니다 .. : 귀하의 경우에는

+1

정말 !!!! 문자열을'=='로 비교합니까? – Smit

+0

또한 각 루프 스루는 내부 루프의 a.size() - 1로 1 끝납니다. a.size() - 1은 바깥 쪽 루프에서 사용할 수 있으므로 비교할 항목이 하나 뿐인 경우 끝에 한 번 추가 시간을 건너 뛰지 않습니다. – nhydock

+1

오, 내 나쁜 ... ==와 같음을 대체하고 i 루프는 a.size()에서 끝나야합니다 - 1은 j 루프가 아닙니다. –

0

, 당신은 당신이 문자열을 사용하는 대신에 메모리가 같은 주소입니다 같이 참조 평등입니다 ==를 사용하고 이후 .equals()을 사용하여 두 문자열을 실제 값과 비교합니다.

for-loop는 이렇게하면 약간 더 효율적으로 만들 수 있습니다.

for (int i = 0; i < a.size()-1; i++) 
{ 
    for (int j = i+1; j < a.size(); j++) 
    { 
     if(a.get(i).equals(a.get(j))) 
     { 
      System.out.println("Element: " + a.get(i)+ " at " + i + " and " + "Element: "+ a.get(j)+ " at " + j); 
     } 

    } 
} 

시간이 있기 때문에 당신은 이미 [I]는 [J] 당신은 [J]를 할 경우, 결과는 동일 동일합니다와 [i]를, 당신은 그냥 건너 뛸 수를 비교할 때 그들. 이렇게하면 j와 i가 같을 때 a [a]가 a [j]와 같은지 확인하지 않아도됩니다.

관련 문제