1

0 ~ 11 の一意の乱数を生成し、それをインデックスとして使用して TextBox に一意の文字を割り当てようとしています。ここにコードがあります

   int[] previous_random = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};//initialized with invalid values

       int current_random;

       Random r_int = new Random();

       boolean match = false;

       for (int n=0;n<=11;n++)
        {
            gb[n] = (TextView)findViewById(IDs[n]);//assigning IDs from XML to java text boxes

        }
       int i = 0;
       while (i<=11)
            {
                current_random = r_int.nextInt(11);//generating a random int from 0-11

                int j =0;
                while (j<=11)
                {
                    if (current_random == previous_random[j])
                        {

                        match = true;break;//match = true shows that this random was used before to skip the loop
                        }
                    j++;
                }   
if(match == false)
      {
    gb[i].setText(randomized_final.charAt(current_random) + "\0");//randomized_final is a string not visible in current code
    previous_random[i] = current_random;//*******PROBLEM HERE************

                }

else
    continue;

i++;

}

}

ここでの問題は、** PROBLEM HERE **とラベル付けされた部分であり、プログラムが応答を停止し、そのアプリの CPU 使用率が 50% を超えますが、アプリはクラッシュせず、トップバーのある空白の画面が表示されるだけです。部分は新しい一意のランダムを保存することになっており、保存は後で比較するためのものです。この部分を削除すると、ランダムが繰り返されることを除いてコードは正常に機能します(これは私が望んでいるものではありません)。

私が間違っていることを教えてください。または、それを行うための代替方法を教えてください。forループでも試しました。何時間も多くの代替方法を試してきました!

4

1 に答える 1

2

この種の問題が面接の質問として使われるのを見たことがあります。可能な解決策は次のとおりです。

1) 0 から 11 の数字を含む int のコレクション (おそらくリスト?) を作成します。

2)そのリストをシャッフルします。

3) 新しい一意の番号が必要になるたびに、リストの次の要素を返します。

コードでは次のようになります。

ArrayList<Integer> list = new ArrayList();
for(int i=0;i<=11;i++){
    list.add(i);
}
Collections.shuffle(list);
于 2013-04-13T08:37:47.817 に答える