索引位于数组的边界之外(c#)

时间:2021-06-09 19:06:03

I get "Index was outside the bounds of the array" on this line, what's wrong?

我得到"索引超出数组的界限"在这条线上,怎么了?

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

Below is the complete code:

以下是完整的代码:

    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();
            }

        }
    }

3 个解决方案

#1


6  

Start your array accesses from 0, and not 1

从0开始数组访问,而不是1。

So, change to this:

所以,改变:

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

Also, start any of your loops at 0, instead of 1. And make the conditional be less than the length, not until equal. More like:

同样,在0处开始任何一个循环,而不是1。使条件小于长度,直到相等。更像:

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

#2


2  

in C# arrays are zero-based...

在c#数组中是从零开始的…

look at what Kevek answered you plus:

看看凯文是怎么回答你的:

this:

这样的:

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

should be:

应该是:

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

#3


1  

Sort is an array 0..3, and Valor is 0..12. So you cannot use Sort[4] and Valor[13].

排序是一个数组0。3,和Valor是0。因此不能使用Sort[4]和Valor[13]。

#1


6  

Start your array accesses from 0, and not 1

从0开始数组访问,而不是1。

So, change to this:

所以,改变:

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

Also, start any of your loops at 0, instead of 1. And make the conditional be less than the length, not until equal. More like:

同样,在0处开始任何一个循环,而不是1。使条件小于长度,直到相等。更像:

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

#2


2  

in C# arrays are zero-based...

在c#数组中是从零开始的…

look at what Kevek answered you plus:

看看凯文是怎么回答你的:

this:

这样的:

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

should be:

应该是:

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

#3


1  

Sort is an array 0..3, and Valor is 0..12. So you cannot use Sort[4] and Valor[13].

排序是一个数组0。3,和Valor是0。因此不能使用Sort[4]和Valor[13]。