2011-09-07 127 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]。

相关问题