2017-05-21 15 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

いくつかあります。 最初に、すべての文字を正確に1回だけ印刷することを意味するのか、重複がない文字だけを印刷するのかはわかりません。それはあなたが二番目を意味するように聞こえる。もしそうなら、私の答えはここにあります:

最初に、isDistinct変数はあなたのコードに基づいてisDuplicateと呼ばれるべきです。 第2に、内側のループでは、条件がj <です。その結果、配列が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で停止する理由はありません。また、あなたのロジックは内部のループ本体に欠陥があります。同じ値(最大でi)を持つ複数の要素がある場合、基本的にisDistinctが真となると言っています。

関連する問題