안녕하세요 여러분 저는 2 차원 배열 4 * 4를 가지고 있습니다. 1부터 16까지의 숫자를 무작위로 채워야합니다. 각 숫자는 한 번만 사용해야하며 1-16 사이의 모든 숫자를 사용해야합니다. 다음 코드를 작성했지만 어떤 이유로 배열의 일부 항목이 채워지지 않았는지 모르겠습니다 !! 누구든지 내가 뭘 잘못하고 있는지 말해 줄 수 있니?
public void generateRandState()
{
bool flag = false;
Random rnd = new Random();
int temp ;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
temp = rnd.Next(1, 17);
Console.WriteLine(temp);
if (taken[temp] == false)
{
state[i, j] = temp;
taken[temp] = true;
}
else // for repeated rands
{
temp = rnd.Next(1, 17);
Console.WriteLine(temp);
while (!flag)
{
if (taken[temp] == false)
{
flag = true;
break;
}
else
temp = rnd.Next(1, 17);
Console.WriteLine(temp);
}
if (taken[temp] == false)
{
state[i, j] = temp;
taken[temp] = true;
}
}
}
}
}
교체 while (!flag)
와 함께 while (true)
. 은 break
이미 당신을 얻을 것이다 while
문. flag
변수가 완전히 불필요하다.
귀하의 알고리즘은 매우 비효율적입니다. dasblinkenlight가 지적했듯이, 당신이하고있는 일을 성취하는 더 좋은 방법이 있습니다.
또한 두 번 이상 taken
전화를 걸면 지워야 한다는 것을 알아야합니다 generateRandState
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다