C# 如何使随机化器随机化直到它是正确的数字
我正在做一个数独游戏,一开始我在做小版本3x3。经过一些编码后,我无法找到以下方法: 如何使S随机化直到正确的数字S随机化,Skaiciai。Neradau表示它没有找到重复的数字,Skaiciai。Yra_Toks_Skaicius表示他找到了已经使用过的相同数字 编辑:用英语重做C# 如何使随机化器随机化直到它是正确的数字,c#,random,C#,Random,我正在做一个数独游戏,一开始我在做小版本3x3。经过一些编码后,我无法找到以下方法: 如何使S随机化直到正确的数字S随机化,Skaiciai。Neradau表示它没有找到重复的数字,Skaiciai。Yra_Toks_Skaicius表示他找到了已经使用过的相同数字 编辑:用英语重做 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using Syste
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _3x3
{
public partial class Form1 : Form
{
TextBox[] Boxes;
public Form1()
{
InitializeComponent();
Boxes = new TextBox[] { textBox1, textBox2, textBox3};
}
public enum Numbers
{
Found_Number,
NotFound
};
private void button1_Click(object sender, EventArgs e)
{
Random X = new Random();
for (int i = 0; i < 3; i++)
{
int S = X.Next(1, 4);
switch (i)
{
case 0:
int A, B;
if (textBox2.Text == "") { A = 0; } else { A = int.Parse(textBox2.Text); }
if (textBox3.Text == "") { B = 0; } else { B = int.Parse(textBox3.Text); }
Numbers R = CheckIfThereIsNumber(S, new int[] { A, B });
if (R == Numbers.NotFound)
{
textBox1.Text = S.ToString();
}
break;
case 1:
int C, D;
if (textBox1.Text == "") { C = 0; } else { C = int.Parse(textBox1.Text); }
if (textBox3.Text == "") { D = 0; } else { D = int.Parse(textBox3.Text); }
Numbers T = CheckIfThereIsNumber(S, new int[] { C, D });
if (T == Numbers.NotFound)
{
textBox2.Text = S.ToString();
}
break;
case 2:
int E, F;
if (textBox1.Text == "") { E = 0; } else { E = int.Parse(textBox1.Text); }
if (textBox2.Text == "") { F = 0; } else { F = int.Parse(textBox2.Text); }
Numbers Y = CheckIfThereIsNumber(S, new int[] { E, F });
if (Y == Numbers.NotFound)
{
textBox3.Text = S.ToString();
}
break;
}
}
}
Numbers CheckIfThereIsNumber(int _searchednumber, int[] _numbers)
{
Numbers Result = Numbers.NotFound;
for (int i = 0; i < _numbers.Length; i++)
{
if (_numbers[i] == _searchednumber)
{
Result = Numbers.Found_Number;
}
}
return Result;
}
}
}
正确的方法是不要随机化数字本身,而是列出一个未使用的数字列表,然后从列表中随机选择哪个数字
List<int> notUsed = findUnusedNumbers();
while (notUsed.Count) {
int randomIndex = X.Next(0, notUsed.Count);
int myChosenNumber = notUsed.get(randomIndex);
// do something with the number here
notUsed.RemoveAt(randomIndex);
}
你为什么在这里用随机数 我以前做过数独游戏,没有随机数字。你要反复考虑各种可能性,而不是随机选择
考虑到你说你还没有学过这些列表操作,如果你不得不使用随机数,只需继续尝试,直到你得到一个有效的数字。如果不添加代码格式问题,就很难查看不是本网站首选语言的代码。请清理你的代码。是的,我可以。欢迎来到StackOverflow。与itsme86的评论相反,这里没有首选语言。如果一台电脑会说,社区也会说,只需在你的问题上贴上适当的标签即可。问题是,这是一所编程入门学校的问题,我们没有学习列表和RemoveAt@TheNoahie不过,您可以使用数组来伪造它,在随机化索引后,使用循环创建一个新数组,而不使用该索引。但可能学习列表更快一点并不是个坏主意:我找到了另一种方法,但效率不高,所以我将尝试学习我刚刚使用过的列表,这样它将运行10次。应该特别注意的是,为什么要使用循环和未用数字列表,是因为如果你一直选择随机数字,你可以一直随机选择1。