【问题标题】:c# loading text from textfile into multiple textBoxes at randomc#将文本文件中的文本随机加载到多个文本框中
【发布时间】:2014-05-18 19:24:39
【问题描述】:

我有一个名为 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); }

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

提前致谢。

【问题讨论】:

  • 把它们放在一个列表中,随机播放,然后分配给你的列表框。见stackoverflow.com/questions/14884934/…
  • 不是这样的 c# wizz ,任何线索如何在我的情况下开始编码,因为我不知道。
  • 看起来就像 @karim 为你做的。

标签: c# random label streamreader


【解决方案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());

然后,将 label0 分配给 answers[0] ... labelN 分配给 answers[N]

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

【讨论】:

  • 所以第一个 public List ReadAllAnswers()... 不是我的 public String getAnswer(int number){} 吗?我在哪里实现 readAllAnswers().. 等?顺便说一句,已经感谢您的帮助!
  • 在创建表单之前调用 ReadAllAnswers(),或者在表单“初始化”方法的开头。然后将 Text 分配给您的标签。
  • 很抱歉仍然有很多错误。似乎无法在我的表格上调用它。还有 answers = answers.OrderBy((item) => rnd.Next()); 这行给了我错误。
  • 查看我的编辑(将 T 替换为字符串)。至于其他错误,如果其他方面不清楚,您可能想问另一个问题。
【解决方案2】:

好吧,既然授人以鱼不如授人以渔。 看来您需要在脑海中澄清每个步骤。最好的方法是写出pseudo-code 来说明您正在尝试做的事情。

  1. 将答案加载到内存中
  2. 将答案转换为数组
  3. 创建一个随机发生器,返回特定长度的数字列表
  4. 该数字列表只能包含小于数组长度的数字
  5. 该列表不能包含两次相同的数字。
  6. 获取这个新列表并遍历您的答案集合
  7. 从数组中提取答案并分配给标签。

这个列表当然可以改进。 通过伪代码将任务分解为可管理的逻辑位 每个任务都成为一个根据其任务命名的函数。

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

编程愉快!

【讨论】:

    猜你喜欢
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多