检查是否已使用数组的所有值

Leo*_*Leo 3 c# arrays list

对不起,如果这是一个愚蠢的菜鸟问题.我正在为我的女朋友做一个非常小的项目 - 一个国家名单,她必须进入他们的首都(晦涩的国家,请注意).由于我是一个初学者,我不得不求助于使用两个数组,一个用于国家,另一个用于大写,具有匹配的索引.这样很容易检查正确的答案,我不必解析任何文本文件或使用任何数据库.我使用随机数字来使它更有趣.为了阻止程序一遍又一遍地生成相同的国家,我使用了一个整数列表来跟踪已经使用了哪些索引,如果列表包含前一个索引,则重新生成该数字.很基本的东西.令人惊讶的是,这一切都有效.

但我遇到了问题.我如何检查我的国家已经用完了?:)我不能简单地检查我的国家/地区数组的列表大小,因为List可能包含比数组更多的值,并且if(taken.Equals(Countries.Length))似乎不起作用.或者我在代码中找不到合适的位置来进行此检查.

对不起,如果这很简单,但我似乎找不到合适的解决方案.

编辑 哇,多么令人惊叹的社区.在从星巴克到我的地方的短暂步行中,我得到了许多质量答案,涵盖了大量的设计技巧.这真是太棒了!谢谢大家!显然,问题已得到解答,但如果有人有任何其他意见,我会为您发布代码.

//现在只需13个国家的测试

string[] Countries = {"Belgium", "France", "The Netherlands", "Spain", "Monaco", "Belarus", "Germany",
                             "Portugal", "Ukraine", "Russia", "Sweden", "Denmark", "South Africa"};
        string[] Capitals = {"Brussels", "Paris", "Amsterdam", "Madrid", "Monaco", "Minsk", "Berlin",
                            "Lisbon", "Kiev", "Moscow", "Stockholm", "Copenhagen", "Pretoria"};
        Random number = new Random();
        List<int> taken = new List<int>();
        int index;
        int score = 0;

        private int Generate()
        {

            while (true) {
                index = number.Next(0, Countries.Length);
                if (taken.Contains(index)) continue;
                // THIS IS WHAT I WAS INITIALLY TRYING TO DO
                if (taken.Equals(Countries.Length)) { 
                    MessageBox.Show("Game over!");
                    return -1;


                }
                return index;
            }
        }


        private void Form1_Load(object sender, EventArgs e)
        {
            index = Generate();
            taken.Add(index);
            label1.Text = Countries[index];
            label3.Text = "0 out of " + Countries.Length.ToString();

        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text.Trim() == Capitals[index].ToString()) {
                label2.Text = "You win!";
                index = Generate();
                taken.Add(index);
                label1.Text = Countries[index];
                textBox1.Clear();
                label3.Text = ++score + " out of " + Countries.Length.ToString();

            }
            else {
                label2.Text = "Wrong!";
                textBox1.Clear();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ree*_*sey 5

为了阻止程序一遍又一遍地生成相同的国家,我使用了一个整数列表来跟踪已经使用了哪些索引,如果列表包含前一个索引,则重新生成该数字.

...

我如何检查我的国家已经用完了?

您可能想要考虑另一种方法,因为这将非常昂贵且过于复杂.

检查您已经添加的国家/地区,而不是尝试随机添加一个国家/地区,您可以创建整个国家/地区列表,然后对集合执行随机播放("随机排序").这样,您将以随机顺序一次性获得所有国家/地区.