c#随机将文本从文本文件加载到多个文本框中

时间:2014-05-18 19:24:39

标签: c# random label streamreader

我有一个名为 answers.txt 的文本文件。在这个文本文件中,我已经说了几个这样的答案:

    answer1 | answer2 | answer3 |...

现在,为了阅读这些答案,我创建了一个名为 answeres 的课程,它包含以下代码:

     public String getAnswer(int number)
    {
        stream = File.OpenText("answers.txt");
        String[] answers;
        string line = stream.ReadLine();
        vragen = line.Split('|');
        return answers[number];
    }

在我需要显示这些文字的mainForm中,我有4个标签。我希望这些标签以随机顺序显示这些答案。我是这样做的:

    public form1()
    {
        InitializeComponent();
    }

    private answer answer1 = new answer();
    private int rand = 0;

    private void form1_Load(object sender, EventArgs e)
    {
        label1.Text = answer1.getAnswer(rand); }

现在这不是随机的(我想要的)&这也仅适用于一个Label。如何确保在多个标签上随机显示文本文件,同时确保没有标签显示文本文件中的相同文本?

提前致谢。

2 个答案:

答案 0 :(得分:1)

读取文件一次(而不是在每次getAnswer()调用时读取它)

public List<String> ReadAllAnswers()
{
    stream = File.OpenText("answers.txt");
    String[] answers;
    string line = stream.ReadLine();
    return line.Split('|', StringSplitOptions.RemoveEmptyEntries);
}

将所有答案放在一个列表中,然后使用如下方法对其进行随机播放:

ReadAllAnswers()
Random rnd = new Random();
answers = answers.OrderBy<string, int>((item) => rnd.Next());

然后,为answers0分配答案[0] ... labelN和答案[N]

label1.Text = answers.getAnswer(0);
//...
label4.Text = answers.getAnswer(3);

答案 1 :(得分:0)

嗯,因为最好教一个人钓鱼而不是给他一条鱼。 似乎你需要在脑海中澄清每个步骤。最好的方法是写出pseudo-code来表达你想要做的事情。

  1. 将答案加载到内存中
  2. 将答案转换为数组
  3. 创建一个随机函数,返回特定长度的数字列表
  4. 该数字列表必须只包含小于数组长度的数字
  5. 该列表不得包含两次相同的数字。
  6. 获取此新列表并迭代您的答案集
  7. 从数组中提取答案并分配给标签。
  8. 这个清单当然可以改进。 通过伪代码将任务分解为可管理的逻辑位 每个任务都成为一个根据其任务命名的函数。

    关于编程(不是C#)的好书是Code Complete

    快乐的节目!