如何在for循环中重置i变量?

时间:2014-03-27 02:16:58

标签: c#

 for (int k = 0; k < 32;k=k+1)
        {

            for (int j = 1; j < 32; j++)
            {
                double Score = (user0[k] * user0[j] + user1[k] * user1[j] + user2[k] * user2[j] + user3[k] * user3[j] + user4[k] * user4[j] + user5[k] * user5[j] + user6[k] * user6[j] + user7[k] * user7[j] + user8[k] * user8[j] + user9[k] * user9[j] + user10[k] * user10[j] + user11[k] * user11[j] + user12[k] * user12[j] + user13[k] * user13[j] + user14[k] * user14[j] + user15[k] * user15[j] + user16[k] * user16[j] + user17[k] * user17[j] + user18[k] * user18[j] + user19[k] * user19[j] + user20[k] * user20[j] + user21[k] * user21[j] + user22[k] * user22[j] + user23[k] * user23[j] + user24[k] * user24[j] + user25[k] * user25[j] + user26[k] * user26[j] + user27[k] * user27[j] + user28[k] * user28[j] + user29[k] * user29[j] + user30[k] * user30[j] + user31[k] * user31[j]) / ((Math.Sqrt(user0[k] * user0[k] + user1[k] * user1[k] + user2[k] * user2[k] + user3[k] * user3[k] + user4[k] * user4[k] + user5[k] * user5[k] + user6[k] * user6[k] + user7[k] * user7[k] + user8[k] * user8[k] + user9[k] * user9[k] + user10[k] * user10[k] + user11[k] * user11[k] + user12[k] * user12[k] + user13[k] * user13[k] + user14[k] * user14[k] + user15[k] * user15[k] + user16[k] * user16[k] + user17[k] * user17[k] + user18[k] * user18[k] + user19[k] * user19[k] + user20[k] * user20[k] + user21[k] * user21[k] + user22[k] * user22[k] + user23[k] * user23[k] + user24[k] * user24[k] + user25[k] * user25[k] + user26[k] * user26[k] + user27[k] * user27[k] + user28[k] * user28[k] + user29[k] * user29[k] + user30[k] * user30[k] + user31[k] * user31[k])) * (Math.Sqrt(user0[j] * user0[j] + user1[j] * user1[j] + user2[j] * user2[j] + user3[j] * user3[j] + user4[j] * user4[j] + user5[j] * user5[j] + user6[j] * user6[j] + user7[j] * user7[j] + user8[j] * user8[j] + user9[j] * user9[j] + user10[j] * user10[j] + user11[j] * user11[j] + user12[j] * user12[j] + user13[j] * user13[j] + user14[j] * user14[j] + user15[j] * user15[j] + user16[j] * user16[j] + user17[j] * user17[j] + user18[j] * user18[j] + user19[j] * user19[j] + user20[j] * user20[j] + user21[j] * user21[j] + user22[j] * user22[j] + user23[j] * user23[j] + user24[j] * user24[j] + user25[j] * user25[j] + user26[j] * user26[j] + user27[j] * user27[j] + user28[j] * user28[j] + user29[j] * user29[j] + user30[j] * user30[j] + user31[j] * user31[j])));

                if (Score > simScore)
                {
                    simScore = Score;
                }


            }

            System.Console.WriteLine("Score =" + simScore);
        }

我认为你可以忽略长方程式。 我需要这个程序来比较1本书和32本书。 for (int k = 0; k < 5;k=k+1)循环用于将所选书籍与其他32本书进行比较(然后给出最大的相似度)。

for (int j = 1; j < 32; j++)循环允许将所有不同的书籍与所选书籍(书籍k)进行比较。

问题在于,一本书无法与自身进行比较,因为我认为它破坏了这个等式,我得到了相似等级的非感性值。 我怎么能省略一本书? (例如:当将k = 3(第3册)与其他书籍进行比较时,我该怎样才能使j不会使用相同的参考?

3 个答案:

答案 0 :(得分:3)

从第一个循环开始第二个循环。比较对(a,b)与比较(b,a)相同,因此您不需要从后面的每本书开始。

   for (var k = 0; k < 5; k++)
   {
        for (var j = k + 1; j < 5; j++)
        {
            ....
            // if you need the complete set, you can store both
            rating[j][k] = ...
            rating[k][j] = ...
        }
   }

答案 1 :(得分:0)

最简单的方法是设置if语句,如果k!= j,它只评估第二个循环的主体。我不熟悉C#,所以可能有其他方法可以做到这一点,我不知道,但这就是我在Python中的方法。

答案 2 :(得分:0)

如何使用continue?

for (int k = 0; k < 32; k++) {
    for (int j = 0; j < 32; j++) {
        if (j == k)
            continue;

        // Compare
        if (isMatch)
            break;
    }
}