是否可以在没有重新固化值的情况下打印此2D阵列?

时间:2018-06-17 06:02:27

标签: java arrays multidimensional-array random

这是我当前的随机2D数组,我需要让每个数组打印在参数中没有重复值。我已经尝试了其他帖子,但它们都没有涵盖多维数组,特别是Math.random。

甚至可以用我安排这个数组值表的方式吗?稍后我将需要能够测试它们以供用户输入。 谢谢你的时间。

public static void main(String[] args) {

    System.out.println("B  I  N  G  O");
    int[][] board = new int[5][5];

    for(int i = 0; i < board.length; i++){
       for(int j =0; j <board.length; j++){
           board[0][j] = (int)(Math.random() *15) +1;
           board[1][j] = (int)(Math.random() *15) +16;
           board[2][j] = (int)(Math.random() *15) +31;
           board[2][2] = 0;
           board[3][j] = (int)(Math.random() *15) +46;
           board[4][j] = (int)(Math.random() *15) +61;
           System.out.printf("%-3s", board[j][i]);
       }
       System.out.println("");
    }  
}       

}

2 个答案:

答案 0 :(得分:0)

  1. 创建一个列表,其中包含0,1,2,3,...,#rows * #columns
  2. 中可能的数字列表
  3. 选择一个随机数,&#39; randomInteger&#39;在当前列表的0到最大长度之间。
  4. 将列表[randomNumber]分配给当前的主板[i] [j]并从列表中删除该号码。
  5. 同样,直到列表中的所有数字都被删除。
  6. 您可能会达到预期的效果。

答案 1 :(得分:0)

尝试使用ArrayList保留所有使用过的整数。

import java.util.ArrayList;
import java.util.Random;

public class Solution  {
    static ArrayList<Integer> random=new ArrayList<Integer>();  
    private static Random r = new Random();
    public static void main(String[] args) {
        System.out.println("B  I  N  G  O");
        int[][] board = new int[5][5];        
        for(int i = 0; i < board.length; i++){
           for(int j =0; j <board.length; j++){
               if(j==0)
                   board[i][j] = getUniqueRandom(15, 1);
               else if(j==1)
                   board[i][j] = getUniqueRandom(30, 16);
               else if(j==2)
                   board[i][j] = getUniqueRandom(45, 31);
               else if(j==3)
                   board[i][j] = getUniqueRandom(60, 46);
               else if(j==4)
                   board[i][j] = getUniqueRandom(75, 61);
               if(i==board.length/2 && j==board.length/2) board[i][j] = 0;
               System.out.printf("%-3s", board[i][j]);
           }
           System.out.println("");     
    }
    }
    static int getUniqueRandom(int max, int min){
        int num = r.nextInt(max-min+1) + min;
        while (random.contains(num)) {
            num = r.nextInt(max-min+1) + min;
        }
        random.add(num);
        return num;
    }
}