我正在进行数独游戏,起初我正在做小版本的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;
}
}
}
答案 0 :(得分:2)
正确的方法是不将数字本身随机化,而是列出未使用的数字并随机播放列表中的哪个数字。
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);
}
答案 1 :(得分:0)
为什么你甚至在这里使用随机数?
我以前做过数独求解器,没有任何随机数。你想迭代各种可能性,而不是随机选择。
鉴于你说你没有被教过那些列表操作,如果你必须使用随机数,只需继续尝试,直到你得到一个有效的。