2011-09-07 130 views
0

我得到「索引超出了數組的界限」這一行,出了什麼問題?索引超出了數組的邊界(C#)

Kort[x, y] = Sort[x] + Valor[y] + " ";  

下面是完整的代碼:

using System; 
    using System.Collections.Generic; 
    using System.ComponentModel; 
    using System.Data; 
    using System.Drawing; 
    using System.Linq; 
    using System.Text; 
    using System.Windows.Forms; 

    namespace uppgift_13 
    { 
     public partial class Form1 : Form 
     { 
      string[,] Kort = new string[4,13]; 
      string[] Valor = new string[13]; 
      string[] Sort = new string[4]; 
      int x, y; 


      public Form1() 
      { 
       InitializeComponent(); 
      } 

      private void Form1_Load(object sender, EventArgs e) 
      { 
       Valor[1] = "2"; 
       Valor[2] = "3"; 
       Valor[3] = "4"; 
       Valor[4] = "5"; 
       Valor[5] = "6"; 
       Valor[6] = "7"; 
       Valor[7] = "8"; 
       Valor[8] = "9"; 
       Valor[9] = "10"; 
       Valor[10] = "Knekt"; 
       Valor[11] = "Dam"; 
       Valor[12] = "Kung"; 
       Valor[13] = "Ess"; 

       Sort[1] = "H"; 
       Sort[2] = "R"; 
       Sort[3] = "S"; 
       Sort[4] = "K"; 
      } 


      private void LaddaKort() 
      { 
       for (this.x = 1; this.x <= 4; this.x++) 
       { 
        for (this.y = 1; this.y <= 13; this.y++) 
        { 
         Kort[x, y] = Sort[x] + Valor[y] + " "; 
        } 
       } 
      } 

      private void SkrivKort() 
      { 
       for (this.x = 1; this.x <= 4; this.x++) 
       { 
        for (this.y = 1; this.y <= 13; this.y++) 
        { 
         richTextBox1.AppendText(Kort[x, y]); 
        } 
       } 
      } 

      private void button1_Click(object sender, EventArgs e) 
      { 
       LaddaKort(); 
       SkrivKort(); 
      } 

     } 
    } 
+0

您可以使用數組初始值設定項(http://msdn.microsoft.com/en-us/library/aa664573(v=vs.71).aspx)在1行中聲明並初始化數組 –

回答

6

啓動陣列從0訪問,而不是1

所以改成這樣:

private void Form1_Load(object sender, EventArgs e) 
      { 
       Valor[0] = "2"; 
       Valor[1] = "3"; 
       Valor[2] = "4"; 
       Valor[3] = "5"; 
       Valor[4] = "6"; 
       Valor[5] = "7"; 
       Valor[6] = "8"; 
       Valor[7] = "9"; 
       Valor[8] = "10"; 
       Valor[9] = "Knekt"; 
       Valor[10] = "Dam"; 
       Valor[11] = "Kung"; 
       Valor[12] = "Ess"; 

       Sort[0] = "H"; 
       Sort[1] = "R"; 
       Sort[2] = "S"; 
       Sort[3] = "K"; 
      } 

而且,開始你的任何循環都是0,而不是1.使條件小於長度,直到相等。更多類似:

for (int i=0; i < theArray.Length; i++) 
+0

您還應該提到這是關於他的循環界限,因爲這是他將要看的地方。他們是基於1 ...以及 編輯:我看到你更新了這篇文章:) – JeffE

+0

是的,感謝您指出,我意外提交後意識到,不幸的是! – Kevek

2
在C#陣列

都是從零開始......

看看什麼Kevek回答你加:

這樣的:

for (this.x = 1; this.x <= 4; this.x++) 
{ 
    for (this.y = 1; this.y <= 13; this.y++) 
    ... 

應該是:

for (this.x = 0; this.x < 4; this.x++) 
{ 
    for (this.y = 0; this.y < 13; this.y++) 
    ... 
1

Sort is an數組0..3,Valor是0..12。所以你不能使用Sort [4]和Valor [13]。

相關問題