我无法将2D数组添加到我的容器类中。帮助将不胜感激
这是我的容器类:
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:索引超出数组的范围。
在ConsoleApp1.Container.Add(String [,] s1,Int32高度,Int32宽度)在C:\ Users \ Justas \ Desktop \ Bandymas \ ConsoleApp1 \ Program.cs:line 26中 在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
添加2D数组时发生错误:
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);
这是我的2D数组的样子:
Berzas,su
la;;sula;
;klevu sa
ldial lap
asula a
aula, a
r suart
zemes vai
kai du
这是一个9x9的数组,我正尝试将其添加到我的容器中
我们将不胜感激
答案 0 :(得分:1)
如果我能正确理解(不确定),那么您想做的就是通过在原始矩阵的对角线中添加一个元素来增加2D数组:
例如:
row = 2
column = 2
Matrix = |'str1' | 'str2'| s = |'str10' | 'str11' |
|'str3' | 'str4'| | ... | ... |
因此,当调用Container.Add(s,0,0)
时,预期的结果将是
Matrix = |'str1' | 'str2'| empty |
|'str3' | 'str4'| empty |
|empty | empty | 'str10'|
据我了解,您的代码是否正确(也许我错了)。然后,出现错误,因为在Matrix数组为2x2时尝试访问Matrix [2,2],因此没有第三列。一种解决方案是
public void Add(string[,] s1, int height, int width)
{
# Create a new Array
var newMatrix = new string[Rows++,Columns++]
# Pass the old array to the new one
for(i=0;i<Rows-1;i++)
{
for(j=0;j<Columns-1;j++)
{
newMatrix[i,j] = Matrix[i,j];
}
}
# Add the new element
newMatrix[Rows, Columns] = s1[height, width];
# Then make the new matrix the good one
Matrix = newMatrix;
}
我希望这是有用的,如果我错了,我将确保对其进行更改。
编辑:
好吧,现在我想我明白了,您想要的是将数组存储到容器类中,而不是添加元素。因此,您应该做的是
public void Add(string[,] s1, int height, int width)
{
Matrix = s1;
Rows = height;
Columns = width;
}
也许我已经简化了。让我知道