【发布时间】:2019-03-05 14:54:13
【问题描述】:
我无法将我的二维数组添加到我的容器类中。帮助将不胜感激
这是我的容器类:
class Container
{
string[,] Matrix;
public int Rows { get; private set; }
public int Columns { get; private set; }
public Container(int rows, int columns)
{
Rows = rows;
Columns = columns;
Matrix = new string[Rows, Columns];
}
public void Add(string[,] s1, int height, int width)
{
Matrix[Rows++, Columns++] = s1[height, width];
}
public string Take(int height, int width)
{
return Matrix[height, width];
}
错误:
未处理的异常:System.IndexOutOfRangeException:索引超出了数组的范围。
在 C:\Users\Justas\Desktop\Bandymas\ConsoleApp1\Program.cs:line 26 中的 ConsoleApp1.Container.Add(String[,] s1, Int32 height, Int32 width) 在 C:\Users\Justas\Desktop\Bandymas\ConsoleApp1\Program.cs:line 92 中的 ConsoleApp1.Program.Read(Int32 n, Container Matrix) 在 C:\Users\Justas\Desktop\Bandymas\ConsoleApp1\Program.cs:line 45 中的 ConsoleApp1.Program.Main(String[] args) 按任意键继续 。 . .
当我尝试使用我的容器类方法 .Add 添加我的二维数组时发生错误:
Matrix.Add(array, rowLength, colLength);
这是二维数组的样子:
string[,] array = new string[n, n];
var list = Enumerable
.Range(0, file.Length / n)
.Select(i => file.Substring(i * n, n))
.ToList();
var res = string.Join(Environment.NewLine, list);
for (int i = 0; i < n; i++)
{
char[] row = list[i].ToCharArray();
for (int j = 0; j < n; j++)
{
array[i, j] = row[j].ToString();
}
}
int rowLength = array.GetLength(0);
int colLength = array.GetLength(1);
这就是我的二维数组的样子:
Berzas,su
la;;sula;
;klevu sa
ldial lap
asula a
aula, a
r suart
zemes vai
kai du
这是一个 9x9 数组,我正在尝试将其添加到我的容器中
非常感谢您的帮助
【问题讨论】:
-
您对
Add()的调用会增加行数和高度,并尝试访问它。根据定义,它将超出数组原始构造设置的边界。 C#/.net 中的Arrays大小固定。 -
@willaien 我明白了,我将如何解决这个问题?因为我必须使用容器类
-
使用类似于
List<T>内部使用的加倍算法:跟踪表观大小(行数、高度)和实际大小(实际行数、实际高度),然后在Add()内部方法,每次添加操作溢出时使用Array.Resize()将底层数组的大小加倍(确保跟踪新的实际大小)
标签: c# arrays multidimensional-array containers