Java 随机分配二维数组

Java assign two dimensional array with random

我正在研究 Deitel 第 9 版的书 Java 如何编程中的数组和数组列表练习。这是我的问题后面的代码

public static void main(String[] args) {
    // TODO code application logic here
    Random r = new Random();

    int[][] sales = new int[5][4];

    // display salesnames
    System.out.println("\t\t  1.Tom   2.Eva   3.Jan   3.Roy    Total);     

    // declare ProductCounter
    int proCount = 1;

    // display array
    for (int row = 0; row < sales.length; row++) {
        System.out.print("Product " + proCount + "\t");

        for (int column = 0; column < sales[row].length; column++) {
            sales[row][column] = 0 + r.nextInt(2);
            System.out.printf("  %d\t", sales[row][column]);

        }
        proCount++;
        System.out.println();
    }

}

}

在第二个 for 循环之后,我用随机数 0 或 1 填充数组,结果如下所示:

                  1.Tom   2.Eva   2.Jan   4.Roy    Product Totals
   Product 1      1       0       1       0 
   Product 2      0       0       1       1 
   Product 3      0       1       0       1 
   Product 4      0       0       0       1 
   Product 5      0       0       0       0 

问题:每位销售员每天递交0-5张销售单

问题:这种随机对每个产品只随机一次。我该如何编码使其在 0-5 之间随机分配,这样也可能意味着它可能是产品编号 2 中的 3 个,因为现在它只决定一种产品是否售出一次。

nextInt 采用一个参数,该参数定义生成的随机数的上限。

sales[row][column] = 0 + r.nextInt(6);

这行代码将允许您生成一个随机整数 (0~5)。

              1.Tom   2.Eva   3.Jan   3.Roy    Product Total
Product 1     1       0       3       3 
Product 2     2       0       0       5 
Product 3     5       0       5       1 
Product 4     4       4       3       0 
Product 5     1       3       3       1 

如果我用 r.nextInt(6);

一个人的总销售额需要是5。

我猜你的问题实际上是 "how can I generate 5 random numbers that can each be 0-5 but that add up to no more than 5"。请确认您在评论中是否是这个意思。

但是,如果这就是您的意思,那么如果没有关于您需要如何分配随机数的更多信息,就不可能回答。例如,一个简单的答案是:

int numbers[5];
int total = Random.nextInt(6);
for (int i = 0; i < numbers.length && total > 0; i++) {
    numbers[i] = Random.nextInt(total);
    total -= numbers[i];
}

但是我非常怀疑这就是您想要的,因为它会使较大的数字严重偏向列表的前面。因此,在我们提供进一步指导之前,您需要决定您想要什么样的随机分布。

你的问题问的真不是很清楚

据我了解,您想要:

  1. 一个销量能有0-5个销量
  2. 您想在 5 个产品中随机分配他的销售额

那么这是你可以做的伪代码:

// code that deal with only 1 sale
int noOfSales = get a 0-5 random number;
loop for noOfSales times {
    p = get a random number less than totalNumberOfProducts
    // to decide which product to sell

    product[p] += 1;
}