【问题标题】:Is it possible to make this 2D array print with no reoccuring values?是否可以在没有重复值的情况下打印此二维数组?
【发布时间】:2018-06-17 06:02:27
【问题描述】:

这是我当前的随机二维数组,我需要让每个数组打印在参数中没有重复值。我已经尝试过其他帖子,但没有一篇涉及多维数组,特别是 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("");
    }  
}       

}

【问题讨论】:

  • 所有尺寸。所以在板[0] [0]。这是 B 列下的第一个数字,到 board[0][4] 是 B 列下的最后一个数字。对于每个打印的字母,依此类推。

标签: java arrays multidimensional-array random


【解决方案1】:

尝试使用 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;
    }
}

【讨论】:

  • 它就像一个魅力,我整晚都被这个难住了。在 Stack / Google 上找不到任何地方如何将我的穴居人代码转换为工作和瘦身的东西。我已经更正了它,现在我正在研究一种用户输入法,它可以根据 BINGO 数组检查输入。
【解决方案2】:
  1. 创建一个列表,其中包含 0、1、2、3、...、#rows * #columns 中的可能数字列表
  2. 在 0 和当前列表的最大长度之间选择一个随机数“randomInteger”。
  3. 将 list[randomNumber] 分配给当前 board[i][j] 并将该号码从您的列表中删除。
  4. 同样,直到删除列表中的所有数字。

您可能会达到预期的结果。

【讨论】:

  • 所以基本上废弃了我创建的嵌套 for 循环?因为如果它是一个多维数组,那么当我尝试针对这些值测试用户输入时,它会给我带来问题,对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多