Mohankumar.Engain Ответов: 2

Индекс находился за пределами массива. в c#


уважаемый господин,

то, как решить индекс, находилось за пределами массива на языке c#.

Примечание это мой пример:


1.
string[] Address1= {"CTS IT PARK","2nd Cross", "#87 Tambaram to Velachery Main Road", "Chennai- 73"};

в этом массиве хранятся 4 значения.

2.
string[] Address2={"TCS IT PARK","Bangalore"};

в этом массиве хранятся 2 значения.

теперь я использую цикл for

for (i = 0, j = 0; i < address1.Length - 1 || j < address2.Length - 1; i++, j++)
{
WriteLine(address1[i],address2[j]);//Error. What can i do here.
}


но ошибка в моем цикле Индекс находился за пределами массива. в c#

Дайте мне решение как решить эту проблему любым альтернативным способом а затем дайте мне решение

Мохана(kainspire)

Sergey Alexandrovich Kryukov

Вы удалили свой вопрос, когда я уже отправил ответ? Вот этот:
http://www.codeproject.com/Questions/305052/How-to-write-code-for-checking-2-condition-in-Fore
Если ты это сделал, то очень плохо. Я трачу хорошее количество времени, чтобы помочь вам, написал большую функцию...
--СА

2 Ответов

Рейтинг:
5

Nigam Patel

Здесь массив address1 имеет больше элементов, чем address2, так что у вас есть проблема с индексом вне диапазона

попробуйте ниже код.

for (i = 0, j = 0; i < address1.Length - 1 || j < address2.Length - 1; i++, j++)
{
if(j < address2.length)
{
   WriteLine(address1[i],address2[j]);
}
else
{
 WriteLine(address1[i],address2[address2.length-1]);
// or what ever you want to display.
}

}


Пожалуйста, дайте мне знать, это полезно для вас?


Рейтинг:
16

Sergey Alexandrovich Kryukov

Итак, что же такого замечательного? У вас просто есть два массива с разной длиной. Вы индексируете диапазон, выходящий за пределы одного из массивов. Хорошо, я чувствую, что мой предыдущий ответ может помочь. Ваш предыдущий вопрос был удален, что очень плохо (кто это сделал?!!).

Ваш код просто не имеет большого смысла.

Однако… эта задача имеет некоторый смысл, если ее обобщить. Во-первых, давайте сделаем элемент массива универсальными параметрами, потому что проблема на самом деле не зависит от него. Давайте сделаем количество массивов произвольным, количество элементов в каждом массиве произвольным и абстрагируем наши условия. Кроме того, давайте сделаем ряд условий произвольными.

Это может иметь некоторый смысл, по крайней мере отдаленно; и, конечно, специальная проблема не будет иметь большого смысла. Что, с жестко закодированными диапазонами массивов и т. д.? Давай…

Этот набор входных данных будет генерировать более одного метода проверки состояния, потому что — как определить, что такое проверка? Я покажу только один из таких методов предикатов, который проверяет, что все условия для всех элементов массива выполняются верно:

static bool AllConditionsValidForAllArrayElements<T>(
                T[][] arrays,
                System.Func<int,
                T, bool>[] conditions)
{
    foreach (T[] array in arrays) {
        int index = 0;
        foreach(T element in array)
            foreach (System.Func<int, T, bool> condition in conditions) {
                if (!condition(index, element))
                    return false;
                ++index;
            } //loop in conditions
    } // loop in arrays
    return true;
} //AllConditionsValidForAllArrayElements


Используя тот же принцип, можно построить различные предикаты на этом наборе данных, такие как "по крайней мере один элемент массива удовлетворяет по крайней мере одному условию", "по крайней мере один элемент массива удовлетворяет всем условиям", "все элементы по крайней мере одного массива удовлетворяют по крайней мере одному условию", "все элементы по крайней мере одного массива удовлетворяют всем условиям", "по крайней мере одно условие удовлетворяется всеми элементами массива" и т. д. Тот, кто может перечислить их все, по крайней мере, хороший ученик. :-)

Здесь только одна проблема: простейший анализ показывает, что вложенные циклы лучше по производительности, чем любые мыслимые способы их объединения в один цикл, ну и что? Я предупреждал о фантазии в своем комментарии к первой версии этого вопроса…

—СА


Rajesh Anuhya

Хороший ответ у моего +5

Sergey Alexandrovich Kryukov

Спасибо тебе, Раджеш,
--СА

Amir Mahfoozi

+5

Sergey Alexandrovich Kryukov

Спасибо, Амир. Интересно, вы голосовали до или после последних исправлений, после [EDIT]? :-)
--СА

Amir Mahfoozi

Это была хорошая попытка описать ему ситуацию. Это стоит пяти даже до отредактированной части ;) .

[no name]

Мой +5 тоже
--МЭРИЛЕНД

Sergey Alexandrovich Kryukov

Спасибо, maulik убыл,
--СА

Monjurul Habib

5!

Sergey Alexandrovich Kryukov

Спасибо, Монжурул.
--СА

thatraja

5!

Sergey Alexandrovich Kryukov

Спасибо тебе, Раджа.
--СА

Little Soldier

как им пользоваться?
AllConditionsValidForAllArrayElements

Sergey Alexandrovich Kryukov

Сравните длину, примените некоторую логику...
—СА