При попытке работы с массивом OnlyGreatMarks в последнем методе происходит ошибка:
System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
Причем одна и та же ошибка появляется в двух разных местах (отмечены комментарием).
Данный метод должен вернуть ступенчатый массив со значениями из двумерного массива, которые больше 8.
Вот сам код:
class Matrix
{
private int[,] matr;
static private Random rand = new Random();
public Matrix(int[,] matr)
{
this.matr = matr;
}
public Matrix()
{
matr = new int[30,10];
for (int i = 0; i < matr.GetLength(0); i++)
for (int j = 0; j < matr.GetLength(1); j++)
matr[i, j] = rand.Next(1,10);
}
public override string ToString()
{
string result = "";
for (int i = 0; i < matr.GetLength(0); i++)
{
for (int j = 0; j < matr.GetLength(1); j++)
{
result += $"{matr[i,j]}\t";
}
result += "\n";
}
return result;
}
public void GreatMarksOnly()
{
int[] OnlyGreatMarks = new int[0];
int[][] MatrixWithGreatMarks = new int[0][];
for (int i = 0; i < matr.GetLength(0); i++)
{
for (int j = 0; j < matr.GetLength(1); j++)
{
if (matr[i, j] > 8)
{
Array.Resize(ref OnlyGreatMarks, OnlyGreatMarks.Length + 1);//первый NullReferenceException
OnlyGreatMarks[OnlyGreatMarks.Length - 1] = matr[i, j];
}
}
if (OnlyGreatMarks.Length > 0)//второй NullReferenceException
{
Array.Resize(ref MatrixWithGreatMarks, MatrixWithGreatMarks.Length + 1);
MatrixWithGreatMarks[MatrixWithGreatMarks.Length - 1] = OnlyGreatMarks;
OnlyGreatMarks = null;
}
}
for (int i = 0; i < MatrixWithGreatMarks.Length; i++)
{
for (int j = 0; j < MatrixWithGreatMarks[i].Length; j++)
Console.Write($"{MatrixWithGreatMarks[i][j]}\t");
Console.WriteLine();
}
}
}
private static void ExtendArray<T>(ref T[] array, T new_value)
{
if (array != null)
{
Array.Resize(ref array, array.Length + 1);
array[array.Length - 1] = new_value;
}
else
{
array = new T[] { new_value };
}
}
public void GreatMarksOnly()
{
int[] OnlyGreatMarks = new int[0];
int _size = OnlyGreatMarks.Length;
int[][] MatrixWithGreatMarks = new int[0][];
for (int i = 0; i < matr.GetLength(0); i++)
{
for (int j = 0; j < matr.GetLength(1); j++)
{
if (matr[i, j] > 8)
{
//Array.Resize(ref OnlyGreatMarks, OnlyGreatMarks.Length + 1);//первый NullReferenceException
_size = OnlyGreatMarks.Length;
ExtendArray(ref OnlyGreatMarks, _size + 1);
_size = OnlyGreatMarks.Length;
OnlyGreatMarks[_size - 1] = matr[i, j];
}
}
_size = OnlyGreatMarks.Length;
if (_size > 0)//второй NullReferenceException
{
Array.Resize(ref MatrixWithGreatMarks, MatrixWithGreatMarks.Length + 1);
MatrixWithGreatMarks[MatrixWithGreatMarks.Length - 1] = OnlyGreatMarks;
OnlyGreatMarks = null;
}
}
}
Продвижение своими сайтами как стратегия роста и независимости