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];
}
但是我非常怀疑这就是您想要的,因为它会使较大的数字严重偏向列表的前面。因此,在我们提供进一步指导之前,您需要决定您想要什么样的随机分布。
你的问题问的真不是很清楚
据我了解,您想要:
- 一个销量能有0-5个销量
- 您想在 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;
}
我正在研究 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];
}
但是我非常怀疑这就是您想要的,因为它会使较大的数字严重偏向列表的前面。因此,在我们提供进一步指导之前,您需要决定您想要什么样的随机分布。
你的问题问的真不是很清楚
据我了解,您想要:
- 一个销量能有0-5个销量
- 您想在 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;
}