这是学校的家庭作业,但我乞求某人只是纠正我的代码。我已经在这工作了两天了,我想我已经解决了所有问题,除非我无法将其作为2D数组工作,所以我暂时设置它只是为了试图解决问题,但是我想把自己深深挖进一个洞里。
分配要求两个骰子滚动36,000次,然后每个和的结果显示在右边,左边两个骰子的总和,就像在2D数组中一样:
12 850
11 1020
10 1200
...
2 900
我已正确显示正确的列,但左栏未显示总和,只显示" System.Int32 []"很多次。
以下是代码:
Random rand = new Random();
const int ARRAY_SIZE = 13;
const double DICE_ROLLS = 36000;
int sum = 0;
int die1 = 0;
int die2 = 0;
int[] sums = new int[ARRAY_SIZE];
int[] dice = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
for (int i = 0; i < DICE_ROLLS; i++ )
{
die1 = rand.Next(1, 7);
die2 = rand.Next(1, 7);
sum = die1 + die2;
sums[sum] += 1;
}
for (int i = 2; i < sums.Length; i++)
{
Console.WriteLine("{0,2} {1,8}", dice, sums[i]);
}
答案 0 :(得分:3)
本着作业的精神,我不会直接修改代码,而是会尝试解释你需要修复的部分,然后让你进行实际的修复。
代码中的主要问题是您尝试打印dice
作为输出左列的值,而不是dice
的单个元素(例如dice[i]
)
但请注意,您不能只使用dice[i]
,因为您的dice
数组中的元素数量少于sums
数组。如果您刚刚在dice
语句中将dice[i]
替换为WriteLine()
,则会出现索引超出范围的异常。
恕我直言,解决此问题的最佳方法是使用11个元素而非13来初始化sums
,然后在跟踪总和时(即在第一个循环中),从实际{减去2
{1}}获取sum
数组索引的值:
sums
然后在第二个循环中,可以安全地使用sums[sum - 2] += 1;
来索引两个数组。
我希望有所帮助。请随时询问任何说明并祝你好运。
答案 1 :(得分:1)
由于您将使用二维数组,因此您需要执行以下操作:
var rand = new Random();
const double diceRolls = 36000;
var sums = new[,] {{2, 0}, {3, 0}, {4, 0}, {5, 0}, {6, 0}, {7, 0}, {8, 0}, {9, 0}, {10, 0}, {11, 0}, {12, 0}};
for (var i = 0; i < diceRolls; i++)
{
var die1 = rand.Next(1, 7);
var die2 = rand.Next(1, 7);
var sum = die1 + die2;
sums[sum - 2, 1] += 1;
}
for (var i = 0; i < sums.GetLength(0); i++)
{
Console.WriteLine("{0,2} {1,8}", sums[i, 0], sums[i, 1]);
}
注1:sum - 2
。由于数组长度仅为11,因此需要从骰子值中减去2。 (0-10而不是2-12)。
注2:sums.GetLength(0)
。如果您使用sums.Length
,您将获得22
,因为数组中实际上有22个元素。您需要获得rank 0
注3:由于您正在处理2d数组,因此您将获得sum[i, 0]
中骰子掷骰的总和以及sum[i, 1]
中的总数。