C# początki - mam napisac taryfikator mandatów , konsola - switch, if else

0

Hej,
dopiero zaczynam w dodatku nauczanie zdalne ;-) mamy napisać w C# taryfikator mandatów
wystukałam takie coś , moglby ktos fachowym okiem spojrzeć?
VS nie woła o błedach, jednak nie wybiera mi opcji dla wysokosci mandatu ( nie wybiera case),
moze to jakas pierdoła, będę wdzięczna za pomoc.

static void Main(string[] args)
        {
            int a, b, mandat; //a - wprowadzona wartosc , b - dozwolona prędkość

            Console.WriteLine("Podaj prędkość z jaką jechał samochód:");
            a = int.Parse(Console.ReadLine());
            Console.WriteLine("Podaj prędkość dozwoloną");
            b = int.Parse(Console.ReadLine());

            if (a > b)// sprawdzamy czy przekroczonono predkosc\
            {

                Console.WriteLine("Prędkość została przekroczona");
                //Console.ReadKey();

                {

                    mandat = a - b;


                    switch (mandat)

                    {
                        case 1:
                            if (mandat < 11) ;
                            Console.WriteLine("Mandat wynosi 50 zlotych i 0 pkt karnych");

                            break;
                        case 2:
                            if (mandat < 21 && mandat > 11) ;
                            Console.WriteLine("Mandat wynosi 50 do 100 zlotych i 2 pkt karne");
                            break;
                        case 3:
                            if (mandat < 31 && mandat > 21) ;
                            Console.WriteLine("Mandat wynosi 100 do 200 zlotych i 4 pkt karne");
                            break;
                        case 4:
                            if (mandat < 41 && mandat > 31) ;
                            Console.WriteLine("Mandat wynosi od 300 do 400 złotych i 6 punktów karnych");
                            break;
                        case 5:
                            if (mandat > 41 && mandat < 51) ;
                            Console.WriteLine("Mandat wynosi 300-400 zlotych i 8 pkt karnych");
                            break;
                        case 6:
                            if (mandat > 51) ;
                            {
                                Console.WriteLine("Mandat wynosi 400-500 zlotych i 10 pkt karnych");

                            }
                            break;
                        default:
                            Console.WriteLine("Nieznana wartość");
                            break;
                    }
                    Console.ReadKey();
                }
            }

            else
            {
                Console.WriteLine("Prędkość nie została przekroczona. ");
                Console.ReadKey();

            }
        }
    }
}
1

A jak działa case 1: - dla jakiej wartości mandat będzie spełniony warunek? Najlepiej podaj sobie wartości 50 i 51 i zdebuguj

1

Poczytaj dokładniej jak działa instrukcja switch. Te numery po case to nie są porządkowe numery, one mają znaczenie.
Spróbuj całkowicie wyrzucić te switch-case zostawiając tylko if-y.

2

switch to taka skrócona wersja dużej ilości else if.
Co zostanie wykonane zależy od wartości po case: i tu wartość, może być liczba lub string itd..
W twoim przypadku, usuń switch i zostaw te if'y, tylko zrób z nich else if.

2

case w instrukcji switch robi coś takiego:

switch (mandat)
                    {
                        if(mandat == 1):
                            if (mandat < 11)
                            Console.WriteLine("Mandat wynosi 50 zlotych i 0 pkt karnych");
                            break;
                        if (mandat == 2):
                            if (mandat < 21 && mandat > 11)
                            Console.WriteLine("Mandat wynosi 50 do 100 zlotych i 2 pkt karne");
                            break;
                        if (mandat == 3):
                            if (mandat < 31 && mandat > 21)
                            Console.WriteLine("Mandat wynosi 100 do 200 zlotych i 4 pkt karne");
                            break;
                        if (mandat == 4):
                            if (mandat < 41 && mandat > 31)
                            Console.WriteLine("Mandat wynosi od 300 do 400 złotych i 6 punktów karnych");
                            break;
                        if (mandat == 5):
                            if (mandat > 41 && mandat < 51)
                            Console.WriteLine("Mandat wynosi 300-400 zlotych i 8 pkt karnych");
                            break;
                        if (mandat == 6):
                            if (mandat > 51) ;
                            {
                                Console.WriteLine("Mandat wynosi 400-500 zlotych i 10 pkt karnych");

                            }
                            break;
                        if (mandat == ???):
                            Console.WriteLine("Nieznana wartość");
                            break;
                    }

To nie da Ci prawidłowego wyniku. Ponad to musisz poprawić warunki np: if (mandat < 21 && mandat > 11 i if (mandat < 31 && mandat > 21). Dlaczego? Dlatego, że gdy mandat będzie równy 21 to nie złapie się ani na jeden ani na drugi warunek.
Jeżeli miałeś już metody możesz to zrobić na 2 sposoby:

  1. Stworzyć metodę obliczającą wariant mandatu od 1 do 6 (jeżeli chcesz to zrobić za pomocą switch)
public static int PobierzWariantMandatu(int predkosc, int dozwolonaPredkosc)
        {
            int roznica = predkosc - dozwolonaPredkosc;
            if (roznica < 11) return 1;
            if (roznica < 21) return 2;
            if (roznica < 31) return 3;
            if (roznica < 41) return 4;
            if (roznica < 51) return 5;
            if (roznica >= 51) return 6;
            return 0;
        }
int wariantMandatu = PobierzWariantMandatu(a, b);
                    switch (wariantMandatu)
                    {
                        case 1:
                            Console.WriteLine("Mandat wynosi 50 zlotych i 0 pkt karnych");
                            break;
                        case 2:
                            Console.WriteLine("Mandat wynosi 50 do 100 zlotych i 2 pkt karne");
                            break;
                        case 3:
                            Console.WriteLine("Mandat wynosi 100 do 200 zlotych i 4 pkt karne");
                            break;
                        case 4:
                            Console.WriteLine("Mandat wynosi od 300 do 400 złotych i 6 punktów karnych");
                            break;
                        case 5:
                            Console.WriteLine("Mandat wynosi 300-400 zlotych i 8 pkt karnych");
                            break;
                        case 6:
                            Console.WriteLine("Mandat wynosi 400-500 zlotych i 10 pkt karnych");
                            break;
                        default:
                            Console.WriteLine("Nieznana wartość");
                            break;
                    }

oraz drugi sposób skracając twój kod:

Console.WriteLine("Prędkość została przekroczona");
 if (mandat < 11) Console.WriteLine("Mandat wynosi 50 zlotych i 0 pkt karnych");
else if(mandat < 21) Console.WriteLine("Mandat wynosi 50 do 100 zlotych i 2 pkt karne");
else if (mandat < 31) // itd.
0

dzięki, rzucili nam 3 języki na raz na studiach ale wiem cos wiecej,

1 użytkowników online, w tym zalogowanych: 0, gości: 1