比较不正常

时间:2017-09-15 00:51:15

标签: c#

我正在进行数独游戏,并遇到问题。

请参阅my .net fiddle和输出图像:

My outputimage of my code

所以我所做的是生成随机数对(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);
}

1 个答案:

答案 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);
          }
        }

你的问题:

  1. \ n对角线:您正在对角线进行迭代 - 因此您永远不会比较整行或整列。您正在检查第1行第1行,然后第2行第2列 检查方块时也是如此。你检查广场1 - 地方1,然后你检查广场2 - 地方2 ...而不是检查第1行col 1,2,3 ...然后第2行col 1,2,3 ...等你忘了用k !!

  2. 您正在从0到9而不是从1到9随机化。

  3. 你正在做一个&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时,我们才会第二次重新随机化。

  4. 您将比较的VALUE存储在Class的行和列中。您应该存储行和列的i和k。

  5. 您正在使用不清楚的变量和类名。

    • 调用变量类 - 不是一个好主意。
    • 调用类Same - 不清楚
    • 调用名称不清楚的数组会使代码难以理解
  6. 您正在迭代您现在添加到的整个数组。 rnArr31和rnArr32 ......

  7. 您在rn31和rn32数组中输入的数字不是1到9。