2011-09-07 16 views
0

이 줄에 "인덱스가 배열의 범위 밖에 있습니다"라는 메시지가 표시됩니다. 무엇이 잘못 되었습니까?인덱스가 배열의 범위 밖에 있습니다 (C#)

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)을 사용하여 배열을 선언하고 한 줄로 초기화 할 수 있습니다. –

답변

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"; 
      } 

, 시작 아래

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

는 전체 코드입니다 귀하의 루프는 0 대신에 1이됩니다. 그리고 조건부가 길이보다 짧아 지도록하십시오. 과 같습니다 :

제로를 기반으로 C#을 배열에
for (int i=0; i < theArray.Length; i++) 
+0

또한 이것이 그가 찾고있는 곳이기 때문에 그의 루프 범위에 관한 것입니다. 그들은 1 기반뿐만 아니라 ... 편집 : 나는 당신이 게시물을 업데이 트를 참조하십시오 :) – JeffE

+0

그래, 그것을 지적 주셔서 감사합니다, 내가 불행히도, 제출 한 후 그것을 깨달았다! – Kevek

2

...

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

정렬 기준은 배열 0..3, 용기 값은 0..12이다. 따라서 Sort [4]와 Valor [13]을 사용할 수 없습니다.

관련 문제