Индекс находился вне границ массива. Смена регистра
Смысл кода в том, что он должен заменять первые буквы каждого слова на верхний регистр, но на заходе в цикл for появляется ошибка "Индекс находился вне границ массива"
using System;
public class Roflanebalo
{
public static void Main(string[] args)
{
string phrase = "How can mirrors be real if our eyes aren't real";
Console.WriteLine(phrase);
char[] arr;
arr = phrase.ToCharArray();
for (int i = 0; i < arr.Length; i++)
{
if (Char.IsWhiteSpace(arr[i]))
{
continue;
}
else
{
if ((Char.IsWhiteSpace(arr[i - 1])) && (!Char.IsWhiteSpace(arr[i + 1])))
{
Char.ToUpper(arr[i]);
}
}
}
Console.WriteLine(arr);
}
}
Ответы (1 шт):
Просто посмотрите, какие будут перебираться значения i при таком цикле:
for (int i = 0; i < arr.Length; i++)
i тут будет меняться от 0 до arr.Length - 1.
Поэтому вылет за границы тут возможен в двух местах внутри цикла (было в трёх местах до редактирования вами кода):
arr[i - 1]когдаi = 0arr[i + 1]когдаi = arr.Length - 1
Вам надо как-то обойти такие ситуации в своём коде, подумайте.
Можно, например, добавить проверку i > 0 в if прежде чем делать что-то с элементом массива arr[i - 1]. Конкретный код зависит от того, какую логику вы реализуете своим кодом, что вы хотите чтобы происходило в этом случае.