数组无法正常显示

时间:2015-03-11 03:57:58

标签: c# arrays for-loop

这是学校的家庭作业,但我乞求某人只是纠正我的代码。我已经在这工作了两天了,我想我已经解决了所有问题,除非我无法将其作为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]);
}

2 个答案:

答案 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]中的总数。