我正在学习C#我正在写一个程序,使数组填充50个随机数字1-6像骰子,然后检查每个值或“边”出现的次数。我在本周早些时候在Python中做了一个骰子游戏,并且遇到了很多麻烦,所以我让i = j =和match = print outs来测试循环和匹配是否正确迭代,所以我在这里做了同样的事情,并且注意到了一些逻辑错误:C#骰子游戏逻辑错误
i循环似乎重复罚款,但每1次迭代的i,J应该重复50次,但我只得到过一次。
i或j循环根本不会迭代,除非在第47行它指出j> dice.Length。写作应该是j < dice.Length使它不会迭代。在屏幕上显示的50个随机数,所以我知道骰子是50的长度和j是0.
第三在第50行,如果骰[i] ==骰[j]我得到一个错误,j是无效的除非我在for循环之上声明j,如果我这样做,我不能在for循环中执行int j = 0,所以我放弃了for循环并做了一个while循环,但它仍然只为第一个值添加一个值匹配,而不是下一个可能的49.
我只在静态void编码,因为它是一个简单的控制台应用程序,感谢您的帮助。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace wk8hw2
{
class Program
{
static void Main(string[] args)
{//staticvoid
int size = 50;
int diceSides = 7;
int matchAdd = 0;
int[] dice = new int[size];
int[] match = new int[diceSides];
Random rnd = new Random();
int j = 0;
Console.WriteLine("Press any key to roll the dice " + size + " times.");
Console.ReadKey();
for (int i = 0; i < dice.Length; i++)//roll dice
{
dice[i] = rnd.Next(1, diceSides);
}
for (int i = 0; i < dice.Length; i++)//show dice
{
Console.Write(dice[i] + " ");
}
Console.WriteLine("done showing dice");//DEBUG
for (int i = 0; i < dice.Length; i++)//outer match loop
{
Console.Write("i = " + i);//DEBUG
if (match[dice[i]] == 0)//if not matched add to match array
{
Console.WriteLine("not yet matched");
matchAdd = 1;
}
else//if alerady matched add no more
{
Console.WriteLine("already matched");
matchAdd = 0;
}
j = 0;
while (j > dice.Length)//inner match loopSUPPOSED TRO BE LESS THAN
{
Console.WriteLine("j = " + j);
if (dice[i] == dice[j])//if equal add to match array
{
match[dice[i]] = match[dice[i]] + matchAdd;
Console.WriteLine("val " + match[dice[i]]);
}
j++;
}
}//endFORouter
for (int i = 1; i < match.Length; i++)
{
Console.WriteLine(i + " came up " + match[i] + " times.");
}
Console.ReadKey();
}//endstaticvoid
}
}
如果你在逻辑上滚动6面骰子,不要有一个值为'7'的变量'diceSides'。使它成为'6',因为这是有道理的,并将滚动语句更改为'rnd.Next(diceSides)+ 1'。 – itsme86
最终值为6是不是问题,在C#显然你输入的最大值实际上是最大+ 1,如果我把6我只得到1-5,如果我输入7为最大我得到1- 6 – JGoss
但是,如果你像我建议的那样做了'rnd.Next(6)+ 1',你可以以更清晰的方式得到(0-5)+ 1给你1 - 6,而不需要混淆读者的想法,重新尝试掷出7面骰子。 – itsme86