Ввод матрицы с клавиатуры
После ввода элементов матрицы возникает исключение : "Array does not have that many dimensions.". Как решить эту проблему?
namespace consolMatrix
{
class Program
{
static Tuple<int, int> MatrixSize()
{
int N, M;
Console.WriteLine("Введите размерность матрицы в виде NxM:");
string input = Console.ReadLine();
while (!input.Contains('x'))
{
Console.WriteLine("Неправильно введена размерность! Формат ввода - NxM: ");
input = Console.ReadLine();
}
string[] inputSplit = input.Split('x');
N = int.Parse(inputSplit[0]);
M = int.Parse(inputSplit[1]);
return Tuple.Create(N, M);
}
static float[,] FormMatrix(Tuple<int, int> MatrixSize)
{
float[,] matrix = new float[MatrixSize.Item1, MatrixSize.Item2];
for (int i = 0; i < MatrixSize.Item1; i++)
{
Console.WriteLine("Введите {0} строку, вводя элементы через пробел:", i + 1);
string input = Console.ReadLine();
string[] inputSplit = input.Split(' ');
while (inputSplit.Length > MatrixSize.Item2)
{
Console.WriteLine("Вы ввели слишком много символов! Введите корректное количество:");
input = Console.ReadLine();
inputSplit = input.Split(' ');
}
for (int j = 0; j < MatrixSize.Item2; j++)
{
matrix[i, j] = float.Parse(inputSplit[j]);
}
}
return matrix;
}
static void PrintMatrix(float[,] matrix)
{
int N = matrix.GetLength(0);
int M = matrix.GetLength(1);
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++) Console.Write("{0} ", matrix[i, j]);
Console.WriteLine();
}
}
static float[,] MatrixSum(float[,] matrix1, float[,] matrix2)
{
if ((matrix1.GetLength(0) == matrix2.GetLength(0)) & (matrix1.GetLength(1) == matrix2.GetLength(2))) // На этой строчке ошибка
{
float[,] sumMatrix = new float[matrix1.GetLength(0), matrix1.GetLength(2)];
for (int i = 0; i < matrix1.GetLength(0); i++)
{
for (int j = 0; j < matrix1.GetLength(1); j++) sumMatrix[i, j] = matrix1[i, j] + matrix2[i, j];
}
return sumMatrix;
}
else
{
Console.WriteLine("Матрицы не могут быть сложены - отличается их размерность.");
return matrix1;
}
}
static void Main(string[] args)
{
Tuple<int, int> Matrix1_Size = MatrixSize();
Tuple<int, int> Matrix2_Size = MatrixSize();
float[,] matrix1 = FormMatrix(Matrix1_Size);
float[,] matrix2 = FormMatrix(Matrix2_Size);
PrintMatrix(matrix1);
PrintMatrix(matrix2);
float[,] matrix3 = MatrixSum(matrix1, matrix2);
PrintMatrix(matrix3);
Console.WriteLine();
Console.WriteLine("Нажмите любую клавишу для выхода из программы");
Console.Read();
}
}
}
Ответы (1 шт):
Автор решения: albert_sergeev
→ Ссылка
Была опечатка в matrix2.GetLength(2), а должно быть matrix2.GetLength(1)