2012-09-21 9 views
5

Tu ujawniam pełne informacje, jestem studentem odrabiającym lekcje. Mam 2 listy z elementami, które można wybrać. To, co się w nich mówi, nie jest potrzebne do wydobycia. Napisałem kod i wszystko działa oprócz tego, że dostaję błąd z informacją "użycie nieprzypisanej zmiennej" na 3 zmiennych na końcu kodu. Są to locFee, dni i rejestracja. Czy ktoś może mi powiedzieć, co robię źle, który powoduje, że zmienne nie mają wartości?Nieprzypisana zmienna listbox

private void btnCalc_Click(object sender, EventArgs e) 
    { 
     double registration, lodging, total, days, locFees; 
     int workshopIndex, locationIndex; 
     if (lbWorkshop.SelectedIndex != -1) 
     { 
      workshopIndex = lbWorkshop.SelectedIndex; 
      switch (workshopIndex) 
      { 
       case 0: 
        days = 3; 
        registration = 1000; 
        break; 
       case 1: 
        days = 3; 
        registration = 800; 
        break; 
       case 2: 
        days = 3; 
        registration = 1500; 
        break; 
       case 3: 
        days = 5; 
        registration = 1300; 
        break; 
       case 4: 
        days = 1; 
        registration = 500; 
        break; 
      } 
     } 
     else 
     { 
      MessageBox.Show("You didn't select a workshop."); 
     } 
     if (lbLocation.SelectedIndex != -1) 
     { 
      locationIndex = lbLocation.SelectedIndex; 
      switch (locationIndex) 
      { 
       case 0: 
        locFees = 150; 
        break; 
       case 1: 
        locFees = 225; 
        break; 
       case 2: 
        locFees = 175; 
        break; 
       case 3: 
        locFees = 300; 
        break; 
       case 4: 
        locFees = 175; 
        break; 
       case 5: 
        locFees = 150; 
        break; 
      } 
     } 
     else 
     { 
      MessageBox.Show("You didn't select a city."); 
     } 
     lodging = locFees * days; 
     total = registration + lodging; 
    } 

Odpowiedz

5

Czy ktoś może mi powiedzieć co robię źle, że powoduje zmienne nie mają wartości?

Jasne - jesteś ignorując możliwość, że workshopIndex nie wynosi 0, 1, 2, 3 lub 4.

Jeśli uważasz, że nigdy nie powinno się zdarzyć, wystarczy dodać:

default: 
    throw new InvalidOperationException("Invalid selected index " + workshopIndex); 

Lub jeśli po prostu chcesz korzystać z niektórych ustawień domyślnych, zrób coś takiego:

default: 
    days = 1; 
    registration = 100; 
    break; 

to pierwszy sposób, w jaki można zakończyć z days i registration nieprzypisane.

Następnie jest fakt, że w ogóle wchodzisz tylko w blok przełącznika, jeśli lbWorkshop.SelectedIndex != -1. Twój else blok jest po prostu:

else 
{ 
    MessageBox.Show("You didn't select a workshop."); 
} 

... więc po tej else bloku, masz zamiar kontynuować. Prawdopodobnie chcesz:

else 
{ 
    MessageBox.Show("You didn't select a workshop."); 
    return; 
} 

pan wtedy dostał ten sam problem dla locFees, zarówno w odniesieniu do instrukcji switch i blokiem else.

Jedna rzecz do nauczenia się z tego: bądź wdzięczny, że kompilator zauważył je dla Ciebie. To powstrzymało cię przed uruchomieniem kodu, który z pewnością zawierał błędy. To zawsze jest dobre.