2012-10-16 9 views
17

Mam następujący fragment kodu, ale mimo tego, że wpisuję "12", nadal otrzymuję "Jesteś starą osobą". Czy 9 - 15 to liczby od 9 do 15? Jak inaczej mogę obsługiwać wiele wartości w jednym przypadku?Przełącznik: wiele wartości w jednym przypadku?

int age = Convert.ToInt32(txtBoxAge.Text); 

    switch (age) 

    { 
    case 1 - 8: 
    MessageBox.Show("You are only " + age + " years old\n You must be kidding right.\nPlease fill in your *real* age."); 
    break; 
    case 9 - 15: 
    MessageBox.Show("You are only " + age + " years old\n That's too young!"); 
    break; 
    case 16-100: 
    MessageBox.Show("You are " + age + " years old\n Perfect."); 
    break; 
    default: 
    MessageBox.Show("You an old person."); 
    break; 
    } 
+2

Nie wydaje się to dobrym przykładem dla instrukcji 'switch'. Miałoby to więcej sensu jako seria zdań "jeśli". – Arran

+1

Przełącznik nie akceptuje wartości zakresu dla przypadku: –

Odpowiedz

32

1 - 8 = -7

9 - 15 = -6

16 - 100 = -84

Masz:

case -7: 
    ... 
    break; 
case -6: 
    ... 
    break; 
case -84: 
    ... 
    break; 

Albo zastosowanie:

case 1: 
case 2: 
case 3: 

itp lub (być może bardziej czytelny) używać:

if(age >= 1 && age <= 8) { 
    ... 
} else if (age >= 9 && age <= 15) { 
    ... 
} else if (age >= 16 && age <= 100) { 
    ... 
} else { 
    ... 
} 

itp

+2

Jeszcze bardziej czytelne byłyby metody obliczające każdy przedział wiekowy :) –

28

trzeba wykonać podobnie jak:

case 1: 
case 2: 
case 3: 
//do stuff 
break; 
+1

Ale w twoim przypadku myślę, że If-constuct byłby lepszy. – Tomtom

+0

Dzięki, zrobiłem to teraz, ale otrzymałem wyjątek FormatException był nieobsługiwany w deklaracji wieku:/ – vlovystack

5

Nie można określić zakres w instrukcji case , można zrobić w następujący sposób.

case 1: 
case 2: 
case 3: 
case 4: 
case 5: 
case 6: 
case 7: 
case 8: 
    MessageBox.Show("You are only " + age + " years old\n You must be kidding right.\nPlease fill in your *real* age."); 
break; 

case 9: 
case 10: 
case 11: 
case 12: 
case 13: 
case 14: 
case 15: 
    MessageBox.Show("You are only " + age + " years old\n That's too young!"); 
    break; 

........... itp.

+26

To jest najgorsza sekcja kodu, którą widziałem wysłana na ten temat strona internetowa od lat. Nadchodzi moment, w którym, jeśli rozwiązanie jest złe, nie dajesz autorowi tego, czego naprawdę chce, ponieważ jest zły. –

+0

Przydatne okazało się pokazanie, w jaki sposób można połączyć nazwany "przypadek" z przypadkiem "domyślnym" w pojedynczym wyniku, zamiast zdefiniowania oddzielnego lub tylko domyślnego. Podobnie jak 'case" case_default ": domyślnie: return x; przerwa; ' – Tiramonium

3

Możesz użyć ifelse zamiast. Ale jeśli chcesz wiedzieć, jak używać przełącznika w tym przypadku.jest przykład.

int age = Convert.ToInt32(txtBoxAge.Text);` 
int flag; 
if(age >= 1 && age <= 8) { 
flag = 1; 
} else if (age >= 9 && age <= 15) { 
flag = 2; 
} else if (age >= 16 && age <= 100) { 
flag = 3; 
} else { 
flag = 4; 
} 
switch (flag) 

{ 
case 1: 
    MessageBox.Show("You are only " + age + " years old\n You must be kidding right.\nPlease fill in your *real* age."); 
break; 
case 2: 
    MessageBox.Show("You are only " + age + " years old\n That's too young!"); 
break; 
case 3: 
    MessageBox.Show("You are " + age + " years old\n Perfect."); 
break; 
default: 
    MessageBox.Show("You an old person."); 
break; 
} 

nadzieję, że pomoże! :)

0

możesz tego spróbować.

 
switch (Valor) 
      { 
       case (Valor1 & Valor2): 

        break;    
      } 
0

Nie ma sposobu, aby ocenić wiele wartości w jednym "przypadku". Możesz użyć instrukcji if (jak sugerowali inni) lub wywołać metodę, która ocenia zakres, do którego należy liczba całkowita, i zwraca wartość reprezentującą ten zakres (np. "Minor", "adult" itd.), A następnie oceń tę zwróconą wartość w instrukcji switch. Oczywiście prawdopodobnie używasz instrukcji if w metodzie niestandardowej.

Powiązane problemy