我正在尝试编写一个循环,它将生成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
当我运行此代码进入无限循环时,我不确定原因。
答案 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();