2013-09-29 58 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