0

こんばんは 5 x 5 のテーブルに異なる数字を入力したい 各列に同じ数字を入れたくない あるべき制限があります, 特定の制限に属しています, できましたが、方法がわかりません表内の数字が 1 回だけであることを避ける

int num;
        int [][] array = new int [5][5];
        Random r = new Random();
        for (int row = 0; row < array.length; row++) {
            for (int col = 0; col < array[row].length; col++) { 
            if(row == 0){
                     num =r.nextInt(15);
                    array[row][col]=num;
            }else if(row == 1){
                     num =r.nextInt(31-16)+16;
                    array[row][col]=num;
            }else if(row == 2){
                     num =r.nextInt(45-31)+31;
                    array[row][col]=num;
            }else if(row == 3){
                     num =r.nextInt(61-46)+46;
                    array[row][col]=num;
            }else if(row == 4){
                     num =r.nextInt(75-61)+61;
                    array[row][col]=num;
            }
            }
        }
4

2 に答える 2

2

行ごとに、含めることができる整数を含むリストを作成し、リストをシャッフルして ( を使用Collections.shuffle())、最初の 5 つの要素を保持します。

または、テーブル全体に異なる要素を含めることが目標の場合は、行列に含めることができるすべての整数を含む単一のリストを作成してから、リストをシャッフルし、リストを反復処理して行列を埋めます。

于 2013-04-22T11:20:51.303 に答える
0

HashSetすでに取得済みの数字を持っている可能性があります。これに追加して複製することはできません。必要に応じて、メソッドを使用しtoArray()て配列オブジェクトを取得します。

それでも配列を使用したい場合は、値が現在のセットに存在しない場合はadd()メソッドがHashMap返され、その場合はテーブルに追加され、そうでない場合は追加されます。truetruefalse

これにより、要素をシャッフルせずにテーブルに追加できます。つまり、テーブルを継続的に更新し、表示する前に完全なセットを待つ必要がない場合です。

これは、行の位置だけでなく、テーブルに対して数値を一意にすることを前提としています。

于 2013-04-22T11:44:34.757 に答える