C# 如何使随机化器随机化直到它是正确的数字

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

我正在做一个数独游戏,一开始我在做小版本3x3。经过一些编码后,我无法找到以下方法:

如何使S随机化直到正确的数字S随机化,Skaiciai。Neradau表示它没有找到重复的数字,Skaiciai。Yra_Toks_Skaicius表示他找到了已经使用过的相同数字

编辑:用英语重做

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。