Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/48: Рейтинг темы: голосов - 48, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 20.01.2017
Сообщений: 11

Объединение case в условии swtich case

20.01.2017, 07:18. Показов 10371. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем приветы!
Скажите, можно ли объединить case'ы в более сокращенный вид, что бы не было, как у меня? А то, у меня таких swithc'ей 3 штуки и просто невозможно прокручивать код.

Спасибо!

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
switch (age)
                            {
                                case 1:
                                case 21:
                                case 31:
                                case 41:
                                case 51:
                                case 61:
                                case 71:
                                case 81:
                                case 91:
                                case 101:
                                case 121:
                                    let = "год";
                                    break;
                                case 2:
                                case 3:
                                case 22:
                                case 32:
                                case 42:
                                case 52:
                                case 62:
                                case 72:
                                case 82:
                                case 92:
                                case 102:
                                case 23:
                                case 33:
                                case 43:
                                case 53:
                                case 63:
                                case 73:
                                case 83:
                                case 93:
                                case 103:
                                case 24:
                                case 34:
                                case 44:
                                case 54:
                                case 64:
                                case 74:
                                case 84:
                                case 94:
                                case 104:
                                    let = "года";
                                    break;
                                default:
                                    let = "лет";
                                    break;
                            }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.01.2017, 07:18
Ответы с готовыми решениями:

Оператор case (ошибка): "Control cannot fall through from one case Label ('default:') to another"
Выдает ошибку: "Control cannot fall through from one case label ('default:') to another" class Program { static...

Циклы swtich и case
День добрый! У меня есть форма с 2 тестами, на вкладках ToolStrip. При открытии формы появляется кнопка, при ее нажатии появляется...

Upper case и Lower case
Здравствуйте!!! Помогите пожалуйста... как прописать функции Upper case и Lower case ? Пользователь должен ввести текст в...

34
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
20.01.2017, 07:39
Alex-West, попробовать на основании значений в блоке switch - case вывести универсальные формулы определения выбора между "год" - "года" - "лет". Вынести формулы в отдельный метод (параметр - целое число, количество лет; возвращаемое значение - соответствующая строка). Таким образом можно сжать код до буквально нескольких строк.
0
Нарушитель
 Аватар для petrolium
99 / 33 / 10
Регистрация: 05.10.2013
Сообщений: 154
Записей в блоге: 1
20.01.2017, 07:56
что то типа такого
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
string age="";
char[] arr;
age = Console.ReadLine();
arr = age.ToCharArray();
if (arr[arr.Length-1].ToString()==1.ToString())
{
   Console.WriteLine(age + " год");
}
else if(arr[arr.Length-1].ToString()==2.ToString()||arr[arr.Length-1].ToString()==3.ToString()||arr[arr.Length-1].ToString()==4.ToString())
{
   Console.WriteLine(age + " года");
}
else
{
   Console.WriteLine(age + " лет");
}
Console.ReadLine();
Добавлено через 12 минут
C#
1
else if(Convert.ToInt32(arr[arr.Length-1])>=2 & Convert.ToInt32(arr[arr.Length-1])<= 4)
0
0 / 0 / 0
Регистрация: 20.01.2017
Сообщений: 11
20.01.2017, 08:04  [ТС]
Осспади, это слишком сложно для меня пока)) Я даже не понимаю, что ты написал. Но я сделал так:

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
static void switch_age(int age, string let)
        {
            switch (age)
            {
                case 1:
                case 21:
                case 31:
                case 41:
                case 51:
                case 61:
                case 71:
                case 81:
                case 91:
                case 101:
                case 121:
                    let = "год";
                    break;
                case 2:
                case 3:
                case 22:
                case 32:
                case 42:
                case 52:
                case 62:
                case 72:
                case 82:
                case 92:
                case 102:
                case 23:
                case 33:
                case 43:
                case 53:
                case 63:
                case 73:
                case 83:
                case 93:
                case 103:
                case 24:
                case 34:
                case 44:
                case 54:
                case 64:
                case 74:
                case 84:
                case 94:
                case 104:
                    let = "года";
                    break;
                default:
                    let = "лет";
                    break;
            }
        }
А использую уже
switch_age(age, let);

НО, VS ругается на переменную let, говорит, мол, ей не присвоено значение, хотя ей присваевается значение прямо в самом методе switch_age во время работы. Вот это как поправить?
0
Эксперт .NET
 Аватар для Usaga
14147 / 9375 / 1351
Регистрация: 21.01.2016
Сообщений: 35,319
20.01.2017, 08:05
Цитата Сообщение от Alex-West Посмотреть сообщение
Осспади, это слишком сложно для меня пока)) Я даже не понимаю, что ты написал.
Может почитать нужно учебничек?

Кстати, если у тебе Age может иметь 10000 значений, то ты все 10000 будешь прописывать в виде кейсов?
1
0 / 0 / 0
Регистрация: 20.01.2017
Сообщений: 11
20.01.2017, 08:25  [ТС]
Относительно "учебничка", я думал, что в теме "Для начинающих" и нужно спрашивать, что бы не искать что-то там, где даже не знаешь.
А что касается большого значения, то на данном этапе я просто условием ограничил цифру до 121.

И все же, почему ругается на переменную let?
0
Нарушитель
 Аватар для petrolium
99 / 33 / 10
Регистрация: 05.10.2013
Сообщений: 154
Записей в блоге: 1
20.01.2017, 08:30
Если ты пишеь
C#
1
static void switch_age(int age, string let)
значит ты должен передать в метод switch_age переменную string let из вне
0
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
20.01.2017, 08:33
Цитата Сообщение от Alex-West Посмотреть сообщение
почему ругается на переменную let
Alex-West, если бы Вы таки почитали справочную информацию по C# (учебник, благо их в Сети - огромное количество; а ещё лучше - несколько учебников), то этот вопрос отпал бы сам собой.

Ответ на Ваш вопрос - скорее всего, в вызывающем коде Вы объявили переменную как-то так:

C#
1
2
3
4
5
string your_variable_name;
 
switch_age(26, your_variable_name);
 
// а тут попытались использовать your_variable_name
что с точки зрения синтаксиса языка является как раз попыткой использования неинициализированной переменной. Кроме того, после возврата управления из метода switch_age, переменная your_variable_name по-прежнему не будет иметь никакого значения.

Для поиска объяснения этого поведения советую Вам обратиться к документации на MSDN, к сайтам ProfessorWeb, Metanit или посмотреть видеокурсы (например, ULearn). Все эти ресурсы являются бесплатными.
0
0 / 0 / 0
Регистрация: 20.01.2017
Сообщений: 11
20.01.2017, 10:12  [ТС]
Окей, спасибо. Я так понял, что даже если ты новичек, то сначала стань программистом, потом заходи на форум, где не нужно задавать вопросы. А иначе говоря, если не хочется отвечать, то лучше не отвечать, чем опинывать человека туда, где он побывал и от безысходности, т.е. от недопонимания того, чего пишут официалы, ему пришлось зарегиться на форуме и отписаться в теме для полных новичков, что бы там ему сказали, "Нуб, читай книжки".

Добавлено через 1 час 26 минут
Спрошу немного подругому и очень прошу знающих ответить по делу, а не посылать меня в книжки или на официальные сайты.

Есть

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
int age; //Возраст в цифрах
int height; //Рост в цифрах
string let; //слова "Год, Года, Лет"
string rost; //слова "Сантиметр, Сантиметра, Сантиметров"
age = Convert.ToInt32(Console.ReadLine()); //Ввод цифры в переменную age
height = Convert.ToInt32(Console.ReadLine()); //Ввод цифры в переменную height
                            switch (age)
                            {
                                case 1:
                                case 21:
                                case 31:
                                case 41:
                                case 51:
                                case 61:
                                case 71:
                                case 81:
                                case 91:
                                case 101:
                                case 121:
                                    let = "год";
                                    break;
                                case 2:
                                case 3:
                                case 22:
                                case 32:
                                case 42:
                                case 52:
                                case 62:
                                case 72:
                                case 82:
                                case 92:
                                case 102:
                                case 23:
                                case 33:
                                case 43:
                                case 53:
                                case 63:
                                case 73:
                                case 83:
                                case 93:
                                case 103:
                                case 24:
                                case 34:
                                case 44:
                                case 54:
                                case 64:
                                case 74:
                                case 84:
                                case 94:
                                case 104:
                                    let = "года";
                                    break;
                                default:
                                    let = "лет";
                                    break;
                            }
 
                            switch (height)
                            {
                                case 1:
                                case 21:
                                case 31:
                                case 41:
                                case 51:
                                case 61:
                                case 71:
                                case 81:
                                case 91:
                                case 101:
                                case 121:
                                case 131:
                                case 141:
                                case 151:
                                case 161:
                                case 171:
                                case 181:
                                case 191:
                                case 201:
                                case 221:
                                    rost = "сантиметр";
                                    break;
                                case 2:
                                case 22:
                                case 32:
                                case 42:
                                case 52:
                                case 62:
                                case 72:
                                case 82:
                                case 92:
                                case 102:
                                case 122:
                                case 132:
                                case 142:
                                case 152:
                                case 162:
                                case 172:
                                case 182:
                                case 192:
                                case 202:
                                case 222:
                                case 3:
                                case 23:
                                case 33:
                                case 43:
                                case 53:
                                case 63:
                                case 73:
                                case 83:
                                case 93:
                                case 103:
                                case 123:
                                case 133:
                                case 143:
                                case 153:
                                case 163:
                                case 173:
                                case 183:
                                case 193:
                                case 203:
                                case 223:
                                case 4:
                                case 24:
                                case 34:
                                case 44:
                                case 54:
                                case 64:
                                case 74:
                                case 84:
                                case 94:
                                case 104:
                                case 124:
                                case 134:
                                case 144:
                                case 154:
                                case 164:
                                case 174:
                                case 184:
                                case 194:
                                case 204:
                                case 224:
                                    rost = "сантиметра";
                                    break;
                                default:
                                    rost = "сантиметров";
                                    break;
                            }
Console.WriteLine("Значицца, вам " + age + " " + let + ", а рост  " + height + " " + rost + "!");
Сделаю пометку, что свыше 121 года и 230 сантиметров у меня стоит проверка и программа заставляет ввести цифры в пределах 121 и 230 соответственно. Просто отметил, что бы не было вопросов не по теме, типа "а че ты будешь, если введут 1000?".
Как мне превратить это в метод, и как этот метод потом использовать, что бы программа не ругалась?
Спасибо.
0
 Аватар для LeniumSoft
1454 / 847 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
20.01.2017, 10:27
Alex-West, https://www.cyberforum.ru/post9666258.html
0
309 / 309 / 215
Регистрация: 24.09.2013
Сообщений: 771
20.01.2017, 10:36
Лучший ответ Сообщение было отмечено Alex-West как решение

Решение

Alex-West, перевод в метод и его использование
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
using System;
 
class Program
{
    static void Main()
    {
        Method();   // использование
        Console.ReadKey();
    }
 
    static void Method()    // превращение в метод
    {
        int age; //Возраст в цифрах
        int height; //Рост в цифрах
        string let; //слова "Год, Года, Лет"
        string rost; //слова "Сантиметр, Сантиметра, Сантиметров"
        age = Convert.ToInt32(Console.ReadLine()); //Ввод цифры в переменную age
        height = Convert.ToInt32(Console.ReadLine()); //Ввод цифры в переменную height
 
        if (age % 10 == 1)
            let = "год";
        else if (age % 10 == 2 || age % 10 == 3 || age % 10 == 4)
            let = "года";
        else let = "лет";
 
        if (height % 10 == 1)
            rost = "сантиметр";
        else if (height % 10 == 2 || height % 10 == 3 || height % 10 == 4)
            rost = "сантиметра";
        else rost = "сантиметров";
 
        Console.WriteLine("Значицца, вам {0} {1}, а рост {2} {3}!", age, let, height, rost);
    }
}
1
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
20.01.2017, 10:45
Pikemaster,
Для возраста 11 и 111 лет и роста 11 и 111 сантиметров будет работать неправильно.
1
309 / 309 / 215
Регистрация: 24.09.2013
Сообщений: 771
20.01.2017, 11:22
Alex-West, исправленный метод (для трёхзначных значений)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
static void Method()    // превращение в метод
{
    int age; //Возраст в цифрах
    int height; //Рост в цифрах
    string let; //слова "Год, Года, Лет"
    string rost; //слова "Сантиметр, Сантиметра, Сантиметров"
    age = Convert.ToInt32(Console.ReadLine()); //Ввод цифры в переменную age
    height = Convert.ToInt32(Console.ReadLine()); //Ввод цифры в переменную height
 
    if (age % 10 == 0 || age % 10 > 4 || age % 100 / 10 == 1)
        let = "лет";
    else if (age % 10 == 1)
        let = "год";
    else let = "года";
 
    if (height % 10 == 0 || height % 10 > 4 || height % 100 / 10 == 1)
        rost = "сантиметров";
    else if (height % 10 == 2 || height % 10 == 3 || height % 10 == 4)
        rost = "сантиметра";
    else rost = "сантиметр";
 
    Console.WriteLine("Значицца, вам {0} {1}, а рост {2} {3}!", age, let, height, rost);
}
1
 Аватар для ata
269 / 253 / 186
Регистрация: 28.10.2015
Сообщений: 723
20.01.2017, 11:32
Цитата Сообщение от bax_tang Посмотреть сообщение
Таким образом можно сжать код до буквально нескольких строк.
До одной.

C#
1
2
3
4
public static string Age(int age)
{
    return String.Format("{0} {1}", age, new string[] { "лет", "год", "года" }[Math.Sign((age + 5) % 10 - 6) + 1]);
}
9
 Аватар для LeniumSoft
1454 / 847 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
20.01.2017, 11:39
Цитата Сообщение от ata Посмотреть сообщение
До одной.
0
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
20.01.2017, 11:50
21
Мне 21год
4
Я писал этот код 4минуты
Для продолжения нажмите любую клавишу . . .
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.Linq;
using System.Collections.Generic;
 
namespace csharp_cmd
{
    class Program
    {
        
        /// @author Mikhail <myrusakov> Rusakov
        static string GetSuffix (int number, string[] words)
        {
            int[] keys = new int[] { 2, 0, 1, 1, 1, 2 };
            int mod = number % 100;
            int index = (mod > 7 && mod < 20) ? 2: keys[Math.Min(mod % 10, 5)];
            return words[index];
        }
 
        static void Main()
        {
            int age = Convert.ToInt32( Console.ReadLine() );
            string[] ageSuffixes = new string[] { "год", "года", "лет" };
            string ageText = "Мне " + age + GetSuffix( age, ageSuffixes );
            Console.WriteLine( ageText );
 
            int time = Convert.ToInt32( Console.ReadLine() );
            string[] timeSuffixes = new string[] { "минуту", "минуты", "минут" };
            string timeText = "Я писал этот код " + time + GetSuffix( time, timeSuffixes );
            Console.WriteLine (timeText); 
        }
    }
}
0
Нарушитель
 Аватар для petrolium
99 / 33 / 10
Регистрация: 05.10.2013
Сообщений: 154
Записей в блоге: 1
20.01.2017, 11:53
ata, каждый раз я от твоих ответов просто восхищяюсь и впадаю в глубокую депрессию задумчивость =)
0
309 / 309 / 215
Регистрация: 24.09.2013
Сообщений: 771
20.01.2017, 11:57
ata, при 11, 12, 13, 14, 111, 112, 113, 114 ... работает неверно
1
Нарушитель
 Аватар для petrolium
99 / 33 / 10
Регистрация: 05.10.2013
Сообщений: 154
Записей в блоге: 1
20.01.2017, 12:10
Цитата Сообщение от Pikemaster Посмотреть сообщение
ata, при 11, 12, 13, 14, 111, 112, 113, 114 ... работает неверно
позволю себе подправить немного
C#
1
return String.Format("{0} {1}", age, new string[] { "лет", "год", "года" }[Math.Sign((age + 15) % 10 - 6) + 1]);
0
309 / 309 / 215
Регистрация: 24.09.2013
Сообщений: 771
20.01.2017, 12:12
petrolium, без изменений, тот же результат.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.01.2017, 12:12
Помогаю со студенческими работами здесь

Ошибка: "Control cannot fall through from one case label ('case '9' (0x39):') to another"
Всем доброго времени суток. Захотел написать интерпритатор для языка HQ9+: string str = Console.ReadLine(); ...

чем use case отличается от business use case (только по русски объяснить и с примером)
_subj

Ошибка CASE в CASE возникла при переносе в столбец с текстом, дату
Подскажите пожалуйста, при формировании второго условия возникла ошибка, как исправить? - как перенести в столбец с текстом, дату с другого...

в case 7 - нужно сделать поиск по номеру группы, а в case 6 сортировку по имени
Помогите пожалуйста: в case 7 - нужно сделать поиск по номеру группы, а в case 6 сортировку по имени #include &lt;iostream&gt; ...

объединение case-ов
case 2: { int n=input_pos(); printf(&quot;Внутреннее представление:%s\n&quot;,DecToBin(var,str)); printf(&quot;Сдвиг...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru