我试图在C#中创建一个简单的数学程序我创建了一个按钮,文本框并将25个变量设置为字符串(句子,在本例中为问题).我希望程序在按下按钮并在文本框中显示字符串时选择10个没有重复的问题.
主要问题是无法让程序选择10个独特的字符串,感谢您的帮助
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;
using System.Windows.Forms;
namespace Math_generator
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void Generate_Click(object sender, EventArgs e)
{
Random random = new Random();
HashSet<int> numbers = new HashSet<int>();
while (numbers.Count < 6)
{
numbers.Add(random.Next(1, 49));
}
TestResults.Text = "Hey " + numbers.ToString();
}
}
//Random random = new Random();
//int MultipleChoice = random.Next(1, 26);
//int MultipleChoice2 = random.Next(1, 26);
//if (MultipleChoice2 == MultipleChoice)
//{
// MultipleChoice2 = random.Next(1, 26);
//}
// int MultipleChoice3 = random.Next(1, 26);
// if (MultipleChoice3 == MultipleChoice || MultipleChoice3 == MultipleChoice2)
// {
// MultipleChoice3 = random.Next(1, 26);
// }
// int MultipleChoice4 = random.Next(1, 26);
// if (MultipleChoice4 == MultipleChoice || MultipleChoice4 == MultipleChoice2 || MultipleChoice4 == MultipleChoice3)
// {
// MultipleChoice4 = random.Next(1, 26);
// }
// int MultipleChoice5 = random.Next(1, 26);
// if (MultipleChoice5 == MultipleChoice || MultipleChoice5 == MultipleChoice2 || MultipleChoice5 == MultipleChoice3 || MultipleChoice5 == MultipleChoice4)
// {
// MultipleChoice5 = random.Next(1, 26);
// }
// int MultipleChoice6 = random.Next(1, 26);
// if (MultipleChoice6 == MultipleChoice || MultipleChoice6 == MultipleChoice2 || MultipleChoice6 == MultipleChoice3 || MultipleChoice6 == MultipleChoice4 || MultipleChoice6 == MultipleChoice5)
// {
// MultipleChoice6 = random.Next(1, 26);
// }
// int MultipleChoice7 = random.Next(1, 26);
// if (MultipleChoice7 == MultipleChoice || MultipleChoice7 == MultipleChoice2 || MultipleChoice7 == MultipleChoice3 || MultipleChoice7 == MultipleChoice4 || MultipleChoice7 == MultipleChoice5 || MultipleChoice7 == MultipleChoice6)
// {
// MultipleChoice7 = random.Next(1, 26);
// }
// int MultipleChoice8 = random.Next(1, 26);
// if (MultipleChoice8 == MultipleChoice || MultipleChoice8 == MultipleChoice2 || MultipleChoice8 == MultipleChoice3 || MultipleChoice8 == MultipleChoice4 || MultipleChoice8 == MultipleChoice5 || MultipleChoice8 == MultipleChoice6 || MultipleChoice8 == MultipleChoice7)
// {
// MultipleChoice8 = random.Next(1, 26);
// }
// int MultipleChoice9 = random.Next(1, 26);
// if (MultipleChoice9 == MultipleChoice || MultipleChoice9 == MultipleChoice2 || MultipleChoice9 == MultipleChoice3 || MultipleChoice9 == MultipleChoice4 || MultipleChoice9 == MultipleChoice5 || MultipleChoice9 == MultipleChoice6 || MultipleChoice9 == MultipleChoice7 || MultipleChoice9 == MultipleChoice8)
// {
// MultipleChoice9 = random.Next(1, 26);
// }
// int MultipleChoice10 = random.Next(1, 26);
//if (MultipleChoice10 == MultipleChoice || MultipleChoice10 == MultipleChoice2 || MultipleChoice10 == MultipleChoice3 || MultipleChoice10 == MultipleChoice4 || MultipleChoice10 == MultipleChoice5 || MultipleChoice10 == MultipleChoice6 || MultipleChoice10 == MultipleChoice7 || MultipleChoice10 == MultipleChoice8 || MultipleChoice10 == MultipleChoice9)
// {
// MultipleChoice10 = random.Next(1, 26);
// }
//TestResults.Text = "your numbers are: " + MultipleChoice + ", " + MultipleChoice2 + ", " + MultipleChoice3 + ", " + MultipleChoice4 + ", " + MultipleChoice5 + ", " + MultipleChoice6 + ", " + MultipleChoice7 + ", " + MultipleChoice8 + ", " + MultipleChoice9 + ", " + MultipleChoice10;
}
Run Code Online (Sandbox Code Playgroud)
你想要做的是将你的25个字符串改组,然后取第10个字符串.你可以这样做:
var shuffled = myStrings.OrderBy(x => random.Next()).Take(10).ToList();
Run Code Online (Sandbox Code Playgroud)
预防常见的错误答案:
有些人会告诉你按照新的指导顺序进行洗牌; 不要这样做.Guids保证唯一性,而不是随机性.
有些人会告诉你,编写十行代码来制作Fischer-Yates shuffle比编写一行代码要好,因为Fischer-Yates的效率更高,因为列表的大小增加到数百万或数十亿; 这是在努力解决你今天没有的问题,也不会有明天的问题.