Расширение массива с сохранением элементов. Проблема с Csharp
using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace first_space
{
class Program
{
static void Main(string[] args)
{
int[,] arrayDouble = { {1,2,3,4,5,6 }, { 1,2,3,4,5,6 }, { 1,2,3,4,5,6 }, { 1,2,3,4,5,6 }, { 1,2,3,4,5,6 }, { 1,2,3,4,5,6 }, }; // [5,5] ведь так?
arrayDouble = arrayFun(arrayDouble); // метод ниже, что будет возвращать двумерный массив
arrayDouble[6, 5] = 55; // проверяю, расширился ли массив
Console.WriteLine(arrayDouble[6,5] + " Вывод"); // пишет, что я вне массива.
}
static int[,] arrayFun(int[,] inputArray)
{
int[,] tempArrayDouble = new int[6, 6]; //должен создаваться массив большего размера, чем [5,5], но сразу после метода и проверки пишут, что я выхожу за границы массива, хотя [6,5] скорее всего в ходит в пределы нового массива. В случае с [7,7] работает все прекрасно. За глупый вопрос извините, но где я неправильно понял работу с массивами?
for (int i = 0; i < inputArray.GetLength(0); i++)
{
for (int j = 0; j < inputArray.GetLength(1); j++)
{
tempArrayDouble[i, j] = inputArray[i, j];
}
}
inputArray = tempArrayDouble;
return inputArray;
}
}
}
Ответы (2 шт):
Пусть Вы создаёте двумерный массив с параметрами
...
int[,] tempArrayDouble = new int[N, M]; // представим, что N и M уже определены
...
Тогда для этого массива можно вызывать только такие элементы, индексы которых будут находиться в промежутке от 0 до N/M не включая (т.е. если мы попробуем написать arrayDouble[N, M], то компилятор пошлёт нас с ошибкой выделения памяти).
В Вашем примере N = M = 6, т.е. мы теперь можем объявлять элементы массива с индексами от 0 до 5. Очевидно, что 6 не входит в данный промежуток, посему и ошибка.
С другой стороны, при arrayDouble[7, 7] индексы теперь включают 6, поэтому тогда ошибка и не выводится. Также на забывайте, что все индексы в массивах начинаются не с 1, а с 0.
Вас, видимо, путает похожесть записи - и там и там квадратные скобки. Но это разное:
new int[6, 6]- тут числа - это размеры массива, т.е. возможное число элементов в массиве по каждому из его измеренийarrayDouble[6, 5]- а тут числа - это индексы в массиве, а индексы массива размеромNбудут лежать в диапазоне от0доN-1в каждом из измерений массива
Так что не забывайте просто, где размеры массива, а где его индексы и то, что индексы начинаются с 0. Например, единственный доступный индекс для массива размером 1 - это индекс 0.