数组显示不正确

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] 中获得总计数。