【发布时间】:2018-04-16 20:52:09
【问题描述】:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
// Changed from *int[,] matrix = new int[2, 2];*
int[,] matrix = new int[3, 3];
// Still getting error with "[3,3]"
matrix[0, 0] = 1;
matrix[0, 1] = 2;
matrix[0, 2] = 3;
matrix[1, 0] = 4;
matrix[1, 1] = 5;
matrix[1, 2] = 6;
matrix[2, 0] = 7;
matrix[2, 1] = 8;
matrix[2, 2] = 9;
Console.Write(matrix[0, 2]);
Console.ReadKey();
}
}
}
这是一个通过命令行执行的基本程序。
运行时,不是显示存储在数组 [0,2] 中的数字“3”,而是出现以下错误:
System.IndexOutOfRangeException:'索引超出了数组的范围。'
【问题讨论】:
-
应该是
new int[3, 3];,这里的数字是每个维度的长度。 -
我正在阅读的这本书给我的印象是数组从零开始向上计数,因此 0、1、2 将算作“三”。
-
C# 中的数组确实从
0开始。但是创建数组时传递的数字是长度,而不是最大索引。所以new int[2, 2]创建了一个 2x2 数组,每个维度的最大索引为1。如果你想要一个 3x3 数组,你需要new int[3,3] -
嗯,更改为 [3,3] 会产生相同的错误。