2017-05-21 2 views
0

문자 배열에 중복되지 않는 (고유 한) 문자 만 인쇄하려고합니다. 아마도 뭔가 잘못되었을 수도 있습니다. 제 실수를 설명하고 보여줄 수 있습니까? 내 코드 :배열의 고유 한 문자를 인쇄하는 방법

public class MyDistinctCharacters { 

    public static void printDistinctCharacters(char[] arr){ 

     for(int i=0;i<arr.length;i++){ 
      boolean isDistinct = false; 
      for(int j=0;j<i;j++){ 
       if(arr[i] == arr[j]){ 
        isDistinct = true; 
        break; 
       } 
      } 
      if(!isDistinct){ 
       System.out.print(arr[i]+" "); 
      } 
     } 
    } 

    public static void main(String a[]){ 

     char[] chars = {a,b,c,c,d,e,e,f}; 
     MyDistinctCharacters.printDistinctCharacters(chars); 
    } 
} 

답변

0

몇 가지가 있습니다. 처음에는 모든 문자를 정확하게 한 번 인쇄 할 것인지, 중복되지 않는 문자 만 인쇄 할 것인지 확실하지 않습니다. 그것은 두 번째를 의미하는 것처럼 들립니다. 그렇다면 여기 내 대답은 다음과 같습니다.

먼저 isDuplicate isDuplicate는 코드에 따라 호출해야합니다. 둘째, 내부 루프에서 조건이 <입니다. 결과적으로 배열의 길이가 10이고 i = 0 인 경우 코드는 배열의 중복을 전혀 검사하지 않고 i = 0의 첫 번째 문자를 출력합니다.

이 문제를 해결하려면 전체 배열에서 중복을 검사해야합니다. 동일한 문자 i를 참조하지 않도록하십시오. 그래서 내부 루프가 있어야한다 :

for(int j=0;j<arr.length;j++){ 
    if(i != j && arr[i] == arr[j]){ 
     isDuplicate = true; 
     break; 
    } 
} 
0

문자가 배열 정의에서 인용한다 :

char[] chars = {'a', 'b', 'c', 'c', 'd', 'e', 'e', 'f'}; 

나는 당신이 그것을 쓴 방법을 컴파일되지 않습니다 확신 해요.

내부 루프에 대해서는 @ValtsBlukis에 동의합니다. 루프 인덱스는 arr.length이어야하며 i에서 멈출 이유가 없습니다. 또한 논리가 내부 루프 본문에 결함이 있습니다. 기본적으로 isDistinct이 같은 값 (최대 i)을 가진 여러 요소가있는 경우 true가됩니다.

관련 문제