数组显示不正确
Array not displaying properly
这是学校的家庭作业,但我恳求有人纠正我的代码。我已经为此工作了两天,我想我已经解决了所有问题,只是我不能让它作为二维阵列工作,所以我临时设置它只是为了尝试解决问题,但我把自己挖得更深,我想。
作业要求将两个骰子掷36,000次,然后在右边显示每次和的结果,在左边显示两个骰子的总和,在二维数组中是这样的:
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]);
}
本着家庭作业的精神,我不会直接修复代码,而是会尝试解释您需要修复的部分,然后让您进行实际修复。
代码中的主要问题是您试图打印 dice
作为输出左列的值,而不是 dice
的单个元素(例如 dice[i]
).
但是请注意,您不能只使用 dice[i]
,因为您的 dice
数组中的元素少于 sums
数组中的元素。如果您只是在 WriteLine()
语句中将 dice
替换为 dice[i]
,则会出现索引越界异常。
恕我直言,解决此问题的最佳方法是用 11 个元素而不是 13 个元素初始化 sums
,然后在跟踪总和时(即在您的第一个循环中),从中减去 2
获取 sums
数组索引的实际 sum
值:
sums[sum - 2] += 1;
然后在你的第二个循环中,你 可以 安全地使用 i
来索引两个数组。
希望对您有所帮助。请随时询问任何说明并祝您作业顺利。
由于您将使用二维数组,因此您需要执行以下操作:
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]);
}
注一:sum - 2
。由于数组长度仅为 11,因此您需要从骰子值中减去 2。 (0-10 而不是 2-12)。
注2:sums.GetLength(0)
。如果你使用 sums.Length
你会得到 22
因为数组中实际上有 22 个元素。您需要获取 rank 0
的长度
注意 3:由于您处理的是二维数组,因此您将在 sum[i, 0]
中获得掷骰子的总和,在 sum[i, 1]
中获得总计数。
这是学校的家庭作业,但我恳求有人纠正我的代码。我已经为此工作了两天,我想我已经解决了所有问题,只是我不能让它作为二维阵列工作,所以我临时设置它只是为了尝试解决问题,但我把自己挖得更深,我想。
作业要求将两个骰子掷36,000次,然后在右边显示每次和的结果,在左边显示两个骰子的总和,在二维数组中是这样的:
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]);
}
本着家庭作业的精神,我不会直接修复代码,而是会尝试解释您需要修复的部分,然后让您进行实际修复。
代码中的主要问题是您试图打印 dice
作为输出左列的值,而不是 dice
的单个元素(例如 dice[i]
).
但是请注意,您不能只使用 dice[i]
,因为您的 dice
数组中的元素少于 sums
数组中的元素。如果您只是在 WriteLine()
语句中将 dice
替换为 dice[i]
,则会出现索引越界异常。
恕我直言,解决此问题的最佳方法是用 11 个元素而不是 13 个元素初始化 sums
,然后在跟踪总和时(即在您的第一个循环中),从中减去 2
获取 sums
数组索引的实际 sum
值:
sums[sum - 2] += 1;
然后在你的第二个循环中,你 可以 安全地使用 i
来索引两个数组。
希望对您有所帮助。请随时询问任何说明并祝您作业顺利。
由于您将使用二维数组,因此您需要执行以下操作:
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]);
}
注一:sum - 2
。由于数组长度仅为 11,因此您需要从骰子值中减去 2。 (0-10 而不是 2-12)。
注2:sums.GetLength(0)
。如果你使用 sums.Length
你会得到 22
因为数组中实际上有 22 个元素。您需要获取 rank 0
注意 3:由于您处理的是二维数组,因此您将在 sum[i, 0]
中获得掷骰子的总和,在 sum[i, 1]
中获得总计数。