Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 2
Регистрация: 13.04.2014
Сообщений: 148
1

Доступ к переменной, объявленной в теле цикла

26.03.2015, 14:22. Показов 1832. Ответов 3
Метки нет (Все метки)

Здравствуйте, есть следующий код
класс проверки на int

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace lab_5_18
{
   public class check
    {
       public int chek_values()
        {
            bool access;
            int n;
            while (true)
            {
                string s = Console.ReadLine();
                access = int.TryParse(s, out n);
                if (!access || n <= 0)
                {
                    Console.WriteLine("Ошибка ввода");
                    Console.Write("n = ");
                }
                else
                {
                    break;
                }
            }
            return n;
        }
    }
}


класс проверки на double

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace lab_5_18
{
   public class checkdouble
    {
        public double check_doublearg (int i)
        {
            bool access;
            double n ;
            while (true)
            {
                string s = Console.ReadLine();
                access = double.TryParse(s, out n);
                if (!access || n <= 0)
                {
                    Console.WriteLine("Ошибка ввода");
                    Console.Write("a"+ i+1 + " = ");
                }
                else
                {
                    break;
                }
            }
            return n;
        }
    }
}


основная программа

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace lab_5_18
{
    class Program
    {
        static void Main(string[] args)
        {
            check arg = new check();
            checkdouble a = new checkdouble();
            double[] mas = new double[1];
            int i,n,last,ch = 0,maxi,summ = 0;
            double c, max = double.MinValue,d;
 
 
            Console.WriteLine("Введите число элементов массива");
            Console.Write("n = ");
            n = arg.chek_values();
            Array.Resize<double>(ref mas, n);
            Console.WriteLine("Введите число \"C\" ");
            Console.Write("C = ");
            c = a.check_doublearg(0);
            Console.WriteLine("Введите элементы массива через \"Enter\"");
            
            for ( i = 0; i < n; i++)
            {
                Console.Write("a [" + (i + 1) + "] = ");
                mas[i] = a.check_doublearg(i);
                if (mas[i] < 0)
                {
                    last = i;
                }
                else last = -1;
                if (mas[i] < c)
                {
                    ch += 1;
                }
                if (mas [i] > max)
                {
                    max = mas[i];
                    maxi = i;
                }
                Console.WriteLine();
            }
            if (last == -1)
            {
 
            }
                Console.ReadKey();
        }
    }
}

проблема в том, что не смотря на то что все переменные объявлены вне цикла, переменная last остается пустой, то есть ее значение за цикл for не передается, что делать? Подскажите пожалуйста!
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2015, 14:22
Ответы с готовыми решениями:

Доступ к переменной, объявленной вне метода
Здравствуйте все, кто решил заглянуть в эту тему =) Суть вопроса такова. У меня есть переменная,...

Должен ли я заботиться о закрытии переменной типа HANDLE, объявленной в теле функции?
Всем здравствуйте. void AnyFunction() { HANDLE h; h = CreateToolhelp32Snapshot(2, 0);...

Доступ к переменной, объявлённой в другом блоке
Здравствуйте! Возможно ли как-нибудь создатъ переменную внутри какого-либо блока (например цикла)...

В теле цикла for, переменной не присваивается значение
Суть программы в том, чтобы перевести число из десятичной системы в двоичную. Переменные: bin...

3
52 / 52 / 18
Регистрация: 20.03.2015
Сообщений: 278
26.03.2015, 14:28 2
Лучший ответ Сообщение было отмечено ecofreeon как решение

Решение

C#
1
int i,n,last,ch = 0,maxi,summ = 0;
объяви правильно
C#
1
int i,n,last=-1,ch = 0,maxi,summ = 0;
1
0 / 0 / 2
Регистрация: 13.04.2014
Сообщений: 148
27.03.2015, 10:09  [ТС] 3
Цитата Сообщение от Prizrak86 Посмотреть сообщение
объяви правильно
как всегда глупая ошибка, благодарю!

Добавлено через 19 часов 7 минут
еще один вопрос по этому же коду, в этом участке
участок кода

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int j = 0; j < ch; j++)
            {
                if ((mas[j] / mas2[0]) >= (0.8) && (mas[j] / mas2[0]) <= (1.2))
                {
                    mas2[j] = mas[j];
                    for (int k = j; k <= ch; k++)
                    {
                        mas[k] = mas[k + 1];
                    }
                    Array.Resize<double>(ref mas, ch - 1);
                    ch--;
                }
            }

нужно удалить из массива mas jый элемент и соответственно уменьшить длину массива, в принцыпе придумал как, но вот тут вот
C#
1
 mas[k] = mas[k + 1];
постоянно выдает, что выходит за рамки массива, хотя по идее не должно, как можно исправить?

Добавлено через 24 минуты
зачем это нужно, на всякий случай напишу "преобразовать массив таким образом, чтобы сначала шли элементы отличающиеся от максимального не более чем на 20% а потом все остальные"
0
1803 / 1111 / 404
Регистрация: 13.06.2013
Сообщений: 3,754
27.03.2015, 16:46 4
Цитата Сообщение от ecofreeon Посмотреть сообщение
что выходит за рамки массива, хотя по идее не должно
Раз говорит, значит выходит. Дебагом бы пробежались давноб проблему решили.
Попробуйте так.
C#
1
2
3
4
for (int k = j; k < ch; k++)
{
     mas[k] = mas[k + 1];
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2015, 16:46

Насколько критично обьявление переменной в теле цикла?
Часто приходится иметь дело с циклами в которых используются некоторые специфичные вспомагательные...

Как в теле цикла поменять значение переменной из условия?
Вобщем цикл классический - переменная приращается на единицу до заданного предела. Но хочу, что бы...

вывод на экран чисел 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12, с использованием одного цикла и что бы все printf были только в теле цикла
вывод на экран чисел 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12, с использованием одного...

Вывод результата в теле цикла и за пределами цикла???
Вывод результата в теле цикла и за его пределами: 1. как это влияет на результат? 2. где про это...

Доступ к коллекции, объявленной в другом методе
Доброго времени суток! Столкнулся с такой проблемой. Есть коллекция list, которая объявляется...

Обращение к переменной, объявленной в будущем
Возможно ли обратится к переменной в PHP, объявленной в будущем? Поясню ситуацию, есть


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru