C# 索引超出了数组的范围 - 请提供特定帮助

本文关键字:帮助 范围 索引 数组 | 更新日期: 2023-09-27 18:33:10

我正在开发一个预订飞机座位的小程序 - 我不断收到此错误。 我希望程序告诉我飞机上的哪些座位(flysaeder)是由什么乘客(passagerer)预订的。只是,如果我进入的座位多于乘客,它就不会运行 - 我需要它来允许开放座位("通道"比"flysaeder"少)。我做错了什么?

我对此有点陌生,所以我为糟糕的解释道歉。

错误发生在"listeOverPassagerer[index] = listeOverPassagerer[i];"上。

namespace eksamenvingerne
{
    public partial class Form1 : Form
    {
        int flysaeder;
        int passagerer;
        Random tilfældighed = new Random();
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            listBox2.Items.Clear();
            {
                int.TryParse(txtsaeder.Text, out flysaeder);
                int.TryParse(txtantalpassagere.Text, out passagerer);
                if (passagerer > flysaeder)
                {
                    MessageBox.Show("Ingen frie pladser!");
                }
                else
                {
                    int[] listeOverPassagerer = Enumerable.Range(0, passagerer).ToArray();
                    int[] flypladser = new int[flysaeder];
                    for (int i = 0; i < flysaeder; i++)
                    {
                        int index = tilfældighed.Next(0, passagerer);
                        flypladser[i] = tilfældighed.Next(i, passagerer);
                        flypladser[i] = listeOverPassagerer[index];
                        listeOverPassagerer[index] = listeOverPassagerer[i];
                    }
                    for (int i = 0; i < flypladser.Length; i++)
                    {
                        listBox1.Items.Add("Sæde #" + i + ": Passagernr.:" + flypladser[i]); //listboxen udskriver indholdet af hver eneste plads.
                    }
                }
            }
        }
    }
}

C# 索引超出了数组的范围 - 请提供特定帮助

你的逻辑实际上导致了这个问题:

首先,您要确保passagerer <= flysaeder

if (passagerer > flysaeder)
{
   MessageBox.Show("Ingen frie pladser!");
}

然后你做一个从 0 到 flysaeder -1 的 for 循环

for (int i = 0; i < flysaeder; i++)

但是flysaeder可能大于passagerer因此您对listeOverPassagerer[i]的访问将引发异常,因为listeOverPassagerer长度为passagerer