Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/64: Рейтинг темы: голосов - 64, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 25.05.2017
Сообщений: 21
1

Локальная переменная или параметр с именем "i" нельзя объявить в данной области

29.09.2019, 19:10. Показов 12289. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написал программу, которая удаляет из одномерного массива все чётные элементы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
namespace Hello
{
    class Program
    {
        
 
        static void Main()
        {
            Console.Write("n = ");
            int n = int.Parse(Console.ReadLine());
            int[] a = new int[n];
            for (int i = 0; i < n; i++)
            {
                Console.WriteLine("a[{0}] = ", i);
                a[i] = int.Parse(Console.ReadLine());
            }
            int i = 0;
            while (i < n)
                if (a[i] % 2 == 0)
                {
                    for (int j = i; j < n - 1; j++)
                        a[j] = a[j + 1];
                    n--;
                }
                else i++;
            Console.WriteLine("Изменённый массив");
            for (int j = 0; j < n; j++)
                Console.WriteLine(a[j]);
 
        }
    }
}
Но при запуске выводит ошибку: «Локальная переменная или параметр с именем "i" нельзя объявить в данной области, так как это имя используется во включающей локальной области для определения локальной переменной или параметра». Проблема, как я понимаю, возникает из-за того, что в 18-й строке я объявил переменную i снова. Но ведь предыдущая переменная с таким именем объявлялась в цикле и после его завершения «уничтожилась», а следовательно, я могу её использовать снова. В чём же тогда ошибка?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.09.2019, 19:10
Ответы с готовыми решениями:

Понять ошибку: Ошибка CS0136 Локальная переменная или параметр с именем "i" нельзя объявить в данной области...
Задание: задан числовой массив, состоящий из n элементов (n&lt;=100). Используя сортировку массива,...

Локальная переменная или функция с именем "ran" уже определена в этой области
Заданы массивы А1(6), А2(7), А3(4), А4(6). Найти минимальное значение положительных чисел массива и...

Глобальная переменная, локальная переменная, параметр переменные, параметр заполнения
Где здесь глобальная переменная, локальная переменная, параметр переменные, параметр заполнения...

Локальная переменная уже определена в этой области
Доброго времени суток, почему если переменная объявлена в первой метке свича, то она будет доступна...

3
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
29.09.2019, 19:37 2
Цитата Сообщение от VanyaTihonov Посмотреть сообщение
из-за того, что в 18-й строке я объявил переменную i снова.
по сути можете считать, что объявили не в 18й а в 10й. Тогда в 13 i будет подменяться, что запрещено
Цитата Сообщение от VanyaTihonov Посмотреть сообщение
а следовательно, я могу её использовать снова.
можете обернуть все что после for в фигурные скобкии использовать i
Цитата Сообщение от VanyaTihonov Посмотреть сообщение
и после его завершения «уничтожилась»
она вышла из области видимости, однако источник ошибки все равно строка 13, а не 18
1
0 / 0 / 0
Регистрация: 25.05.2017
Сообщений: 21
29.09.2019, 20:22  [ТС] 3
Цитата Сообщение от КОП Посмотреть сообщение
по сути можете считать, что объявили не в 18й а в 10й.
Почему тогда, если убрать int из 13-й строки, будет появляться ошибка: «Невозможно использовать локальную переменную "i" перед ее объявлением»?
Я, конечно, исправил ошибку, поменяв название у второй i, но хотелось бы понять, почему она появлялась.
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
29.09.2019, 20:37 4
Лучший ответ Сообщение было отмечено VanyaTihonov как решение

Решение

Цитата Сообщение от VanyaTihonov Посмотреть сообщение
Почему тогда, если убрать int из 13-й строки, будет появляться ошибка: «Невозможно использовать локальную переменную "i" перед ее объявлением»?
потому что "можете считать" относилось к области видимости и вовсе не значит что так можно делать при фактическом использовании переменной. Объявлять перед использованием все равно придется, однако область видимости переменной начнется в начале блока, а не только с той строки, где она объявлена в коде.
Цитата Сообщение от VanyaTihonov Посмотреть сообщение
но хотелось бы понять, почему она появлялась.
нельзя во внутреннем блоке переопределять переменные из внешнего блока. Таковы правила языка.

Добавлено через 5 минут
PS: Область видимости это я вольно перевел, это про declaration space
1
29.09.2019, 20:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.09.2019, 20:37
Помогаю со студенческими работами здесь

Локальная переменная или referens
Всем доброго дня!

Что предпочтительней, локальная переменная или глобальная
Как лучше объявить очередь? struct Struct1 { void Function() { ...

Параметр или переменная в классе?
Какие правила существуют для выбора: передача параметра в метод или создание private поля в классе?...

Set /p это формальный параметр или переменная окружения
Как можно сделать так, чтобы пользователь сам в командной строке во время выполнения bat файла...

Как сделать, чтобы параметр или переменная внутри агента стали статическими?
Что бы у всех обьектов этот параметр, поле,, были одинаковыми, глобальными переменными?

определение принадлежит ли точка данной области или нет
присвоить переменной К значение true, если точка с координатами х,у принадлежит области x^2+y^2=R...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru