我正在进行数独游戏,并遇到问题。
请参阅my .net fiddle和输出图像:
所以我所做的是生成随机数对(1到9之间,如(1,2))并将它们一个一个地保存在一个数组中。 之后,我检查了生成的下一个数字不应该生成相同,所以我做了比较,如
int[] randomNumbersArray13 = new int[9];
int[] randomNumbersArray23 = new int[9];
randomNumbersArray13[0] = 122;
randomNumbersArray23[0] = 12212;
int va12, vb12;
for (int k = 0; k < 9; k++)
{
Same Class = new Same();
va12 = rnd.Next(0, 9);
vb12 = rnd.Next(0, 9);
for (int i = 0; i < 9; i++)
{
while (va12 == randomNumbersArray1[i] && vb12 == randomNumbersArray2[i])
{
va12 = rnd.Next(0, 9);
vb12 = rnd.Next(0, 9);
}
}
for (int i = 0; i < 9; i++)
{
while (va12 == randomNumbersArray12[i] && vb12 == randomNumbersArray22[i])
{
va12 = rnd.Next(0, 9);
vb12 = rnd.Next(0, 9);
}
}
for (int i = 0; i < randomNumbersArray13.Length; i++)
{
while (va12 == randomNumbersArray13[i] && vb12 == randomNumbersArray23[i])
{
va12 = rnd.Next(0, 9);
vb12 = rnd.Next(0, 9);
}
}
Class.rows = va12;
Class.column = vb12;
randomNumbersArray12[k] = va12;
randomNumbersArray22[k] = vb12;
randomNumbersArray[va12, vb12] = 3;
myExpenseManager.AddExpense(Class);
}
答案 0 :(得分:0)
由于您没有向我们提供完整源代码的链接,因此无法理解该问题。
但是我能够从输出和现有代码中推断出预期的内容。我编辑了这个问题,added a dotnet fiddle, here。
你正在做&#34;费用&#34;随机选择的数独游戏的功能(一种得分)。
你有几个问题。简而言之,这里是您需要的代码。然后,我将解释您的代码出了什么问题。
// I'm using i and j, instead of k and i that you used
// I'm using 2 dimensional arrays - see my code.
// I'm using clear names.
// There's only one variable: 'v'. v holds the current random value.
for (var i=0; i<9; i++)
for (var j=0; j<9; j++)
{
// if non-unique in the row/column or non-unique in the square, then re-randomize
// Also check that it's unique in your resulting array
// you'll need a special function to check which square your in...
// not in the scope of my answer. If you want, ask and I'll show you how.
// meanwhile let's check that in this row and column of the unique array it's unique
for (var m=0; m<i; m++)
for (var n=0; n<j; n++)
while (v == uniqueArray[m,j] || v == uniqueArray[i,n]
|| v == rowcolArray[i,j] || v == squaresArray[i,j])
v = rnd.Next(1,9);
// and now use the unique number in your two dimensional array
uniqueArray[i,j] = v;
scoreArray[i,j] = 3;
// probably scoreArray should be with some kind of algorithm,
// outside the scope of this answer. Ask if you still need to understand
same = new Same(i,j);
myExpenseManager.AddExpense(same);
}
}
你的问题:
\ n对角线:您正在对角线进行迭代 - 因此您永远不会比较整行或整列。您正在检查第1行第1行,然后第2行第2列 检查方块时也是如此。你检查广场1 - 地方1,然后你检查广场2 - 地方2 ...而不是检查第1行col 1,2,3 ...然后第2行col 1,2,3 ...等你忘了用k !!
您正在从0到9而不是从1到9随机化。
你正在做一个&amp;&amp;而你应该做一个||检查你是否独特。 &安培;&安培;将是真的只有两个PAIR是相同的:rn1Array [i] = va12 AND rn2Array [i] = vb12。例如,当i = 9时:如果va = 5且rn1 [9] = 5,它仍然不会选择新的va,除非vb和rn2 [9]相等。所以,继续这个例子,如果vb = 7但是rn2 [9] = 6,那么当前的va将被接受!并且由于您使用相同的变量(在最近的9次比较中被认为是唯一的)对所有数组进行迭代,因此只有3次三次值相同时才会重新随机化:
va12:随机选择说:7 rn21 [i:9]说7 vb12:随机选择说:5 rn22 [i:9]:说5.这是我们重新随机化的唯一情况 但是现在我们重新随机化了,va12:3,vb12:8 我们检查rn31 [i:9]和rn32 [i:9] 只有当rn31 = 3且rn32 = 8时,我们才会第二次重新随机化。
您将比较的VALUE存储在Class的行和列中。您应该存储行和列的i和k。
您正在使用不清楚的变量和类名。
您正在迭代您现在添加到的整个数组。 rnArr31和rnArr32 ......
您在rn31和rn32数组中输入的数字不是1到9。