2017-03-08 3 views
0

配列のintの個数を数えるプログラムを作成しようとしています。私がしようとしたのは、一意の整数をリストするメソッドを作成し、次にリスト項目を元の配列項目と比較する別の方法です。Listingを使用してintの配列を生成する

public List listUnique(int[] arr){ 
    Arrays.sort(arr); 
    List <Integer> temp = new ArrayList<>(); 
    int currentInt = 0; 
    for (int i = 0; i < arr.length; i++){ 
     if(arr[i] != currentInt){ 
      temp.add(arr[i]); 
      currentInt = arr[i]; 
     } 
    } 
    return temp; 
} 
public int[] countDupli(List unique, int[] arr){ 
    int [] ret = new int[unique.size()]; 
    Iterator <Integer> iterator = unique.iterator(); 
    for (int l = 0; l < unique.size(); l++){ 
     ret[l] = iterator.next().intValue(); 
    } 
    int[] dupli = new int[ret.length]; 
    for (int j = 0; j < ret.length; j++){ 
     dupli[j] = 0; 
    } 
    for (int k = 0; k < ret.length; k++){ 
     for (int i = 0; i < arr.length; i++){ 
      if (ret[k] == arr[i]){ 
       dupli[k]+= 1; 
      } 
     } 
     k++; 
    } 
return dupli; 
} 

これは何をするつもりではありません。たとえば、{1,2、...、1,2}の10項目の入力は正しい固有項目を出力しますが、1のカウントだけを出力しますが、2の出力は出力しません。dupli = [5,0]。どこでアルゴリズムがうまくいかなかったのですか?ありがとう

+0

デバッグを試しましたか? – shmosel

+0

まだ、申し訳ありませんが、私はJavaのかなりの初心者です。 –

+0

は地図の仕事のように聞こえる – Andreas

答えて

0

あなたのコードでは、デバッグを試みるかret []値を出力して、すべての一意の値が存在するかどうかを確認してください。

他の提案:あなたは、単にHashSetのを使用することができます

List <Integer> temp = new ArrayList<>(); 
     int currentInt = 0; 
     for (int i = 0; i < arr.length; i++){ 
      if(arr[i] != currentInt){ 
       temp.add(arr[i]); 
       currentInt = arr[i]; 
      } 

、その後、あなたはユニークな値を見つけるために、上記のコード記述する必要はありません。 HashSetは重複した値を格納しません。

Set<Integer> set = new HashSet<Integer>(Arrays.asList(arr)); 

次に、イテレータを使用してソートされた配列と比較し、同時にカウントを増やすことができます。

forループはjavaをデフォルトで0に初期化するため、forループをスキップできます。

int[] dupli = new int[ret.length]; 
    for (int j = 0; j < ret.length; j++){ 
     dupli[j] = 0; 
    } 
関連する問題