2016-07-04 2 views
-1

私は、各反復で重複した値(誕生日など)をチェックし、その中に重複値を持つ反復の数を返す解を書く必要があります。 1つの複製が見つかった場合は、現在の繰り返しを停止して、次の複製を開始することができます。重複した値を確認するにはどうすればよいですか?

私の解決策を変更する必要があります。この重複問題を解決するには、どのように解決策を書くべきか。

static int runSim(int thePeople, int theCount) { 

    int count = 0; 

    // Runs the Sim by Count 
    for(int i = 1; i <= theCount; i++) { 

     List<Integer> listOfGenNums = new ArrayList<>(); 

     Random rand = new Random(); 
     rand.setSeed(i); 

    ppl: for (int j = 0; j <= thePeople; j++) { 

      int genN = rand.nextInt(365); 

      // Add Values to Arraylist 
      listOfGenNums.add(j, genN); 

      // Converted ArrayList to Array 
      Object[] array = listOfGenNums.toArray(); 

      // Check Item by Item 
      for(int h = 0; h <= array.length; h++) { 
       for(int k = i+1; k <= array.length-2; k++) { 

        // Checks if Index[i] is Same as Index[j] 
        if (array[h].equals(array[k])) { 

         count += 1; 
         break ppl; 

        } // End IF 

       } // End Inner Loop 

      } // End Loop 

     } // End People Loop 

    } // End Simulation Loop 

    return count; 
} 
+0

for(int h = 0; h <= array.length; h ++) 'これは配列のインデックスが範囲外になるようにします。クイックダーティな解決策は、セットを作成し、配列を通り、各値を設定に追加することです。 Setのメソッドadd()は、valueがすでにセットされている場合はfalseを返します。 –

+0

あなたはリストにいくつの重複があるのか​​知ることだけが必要ですか? –

+0

はい現在のリストに少なくとも1つの重複が見つかった場合。次の反復を開始して新しい値リストをチェックします。 – TAA

答えて

0

私はHashSetを使用します。これにより、あなたがすでに現在の番号にアクセスしたかどうかを常に確認することができます。既に訪問されている場合は、ブレークしてカウントを増やすことができます。それ以外の場合は、ハッシュセットに追加して続行します。

あなたのコードは、より効率的に書き直されました。

static int runSim(int thePeople, int theCount) { 

int count = 0; 
// Runs the Sim by Count 
for(int i = 1; i <= theCount; i++) { 
    Hash<Integer> setOfGenNums = new HashSet<Integer>(); 
    Random rand = new Random(); 
    rand.setSeed(i); 

    for (int j = 0; j < thePeople; j++) { 
     int genN = rand.nextInt(365); 
     if(setOfGenNums.contains(genN)){ 
      count++; break; 
     } 

     listOfGenNums.add(genN); 

    } // End People Loop 
} //End Count Loop 
return count; 
} 
関連する問題