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.
}
}
}
}
}
}
你的逻辑实际上导致了这个问题:
首先,您要确保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