2013-09-29 109 views
-1

我正在制定一个预订飞机座位的小程序 - 而且我一直收到此错误。我想让节目向我展示飞机上哪些座位(flysaeder)正在由乘客(通道者)预订。只有如果我输入的座位数多于乘客数量,它就不会运行 - 我需要它来允许空位(比“flysaeder”少一些“通道员”)。我究竟做错了什么?C#索引超出了特定数组的帮助范围,请

我在这里有点新,所以我很抱歉说不好。

“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. 

        } 
       } 
      } 
     } 
    } 
} 
+2

您会在哪一行发生错误?该错误基本上告诉你,你试图引用一个数组中的项目,但该项目实际上并不存在。所以你的逻辑在某个地方可能会出现错误,对于没有提出这种逻辑的人来说,这并不是很明显。哪一行会引发错误,以及发生时所涉及变量的运行时值是什么? – David

+0

哦,对不起。 错误发生在“listeOverPassagerer [index] = listeOverPassagerer [i];” 我认为问题是索引和数组不匹配,但我不明白。 (我实际上不是这个辉煌)。 – Ithaca

+0

当传播者== flyseader发生了吗? – Dvir

回答

2

你的逻辑其实是造成这个问题:

首先你要确保passagerer <= flysaeder

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

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

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

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

+0

这是有道理的 - 所以我怎么才能让少“passagerer”比“flysaeder” – Ithaca

+0

'INT指数=tilfældighed.Next(0,passagerer);'所以'指数= 0?这不是'答案'。这看起来不像是答案。 –

+0

@HenkHolterman它不是'索引'是造成问题,它是'我' – BrokenGlass