我在for循环中遇到了逻辑问题

时间:2017-03-10 22:18:29

标签: c# .net foreach

我正在尝试编写一个循环,它将生成0到2之间的随机数,并使用此数字作为数组的索引。这将完成3次,每个后续数字应该是不同的(例如,我有一个int数组{1,2,3}。当它通过程序时,它打印3-1-2, 3-2-1, 2-3-1, 1-2-3, 2-1-3等但从不{{1等等数字,在这种情况下为3,重复。

以下是我尝试执行此操作的代码:

3-1-3

当我运行此代码进入无限循环时,我不确定原因。

3 个答案:

答案 0 :(得分:1)

interface MyCellTableStyle extends CellTable.Style {} interface TableResources extends CellTable.Resources { @Override @Source(value = {CellTable.Style.DEFAULT_CSS, "CellTablePatch.css"}) MyCellTableStyle cellTableStyle(); } 并不保证该号码是唯一的。您的范围也是0到2,您可能会获得重复值。

Random.Next

生成新随机数的功能

public List<int> answersDone = new List<int>();

检查计数是否有3条记录。

private void NewNumber()
{
    MyNumber = rand.Next(0, 2);
    if (!answersDone.Contains(MyNumber))
        answersDone.Add(MyNumber);
}

答案 1 :(得分:0)

因为在你的'foreach'中你的if'if'最终会被认为是真实的,并且在你内部使你'完成'是真的,所以你的时间永远不会退出。 我想这就是你想要的:

int ans1 = getRand();
int ans2 = getRand();
int ans3 = getRand();

public int getRand()
{

 done = false;
 while(!done)
 {
     tempAns  = rand.Next(0, 2);
     done = false;
     foreach(int i in answersDone)
     {
         if (tempAns == i)
         {
             done = true;

         }
     }
 }
    answersDone.Add(tempAns);
    return tempAns;
}
}

您还可以使用break,如下所示:

int ans1 = getRand();
int ans2 = getRand();
int ans3 = getRand();

public int getRand()
{

 done = false;
 while(!done)
 {
     tempAns  = rand.Next(0, 2);
     done = false;
     foreach(int i in answersDone)
     {
         if (tempAns == i)
         {
             done = true;
             break;
         }
     }
 }
    answersDone.Add(tempAns);
    return tempAns;
}
}

答案 2 :(得分:0)

随机化你的数组:

int[] inputArray = {1, 2, 3};
Random rnd = new Random();
int[] randomArray = inputArray.OrderBy(x => rnd.Next()).ToArray();