Problemy z programem dotyczącym gry toto-lotek

0

Moim dzisiejszym projekcikiem było stworzenie loterii/totolotka. Program ma losować liczby, my mamy podawać swoje, on ma je porównywać i taakie tam. Program zaczął się wysypywać, kiedy zmieniłem moją tablicę, która przechowuje liczby wpisane z długości "5" na "n", gdzie n podajemy na początku programu. Czy to jest poprawne? Jak nie, to czym to zastąpić?

namespace Loteria
{
    class Program
    {
        public static int n;
        public static int[] losowane=new int[5];
        public static int[] wpisane=new int[n+1];
        public static int k;
        public static Random r=new Random();
        public static void Losowanie()
        {
            for (int i = 0; i < 5; i++)
            {
                losowane[i] = r.Next(0, 20);
            }
        }
        public static void PodawanieIlosciLiczb()
        {
            Console.WriteLine("Podaj ilość szans do wylosowania liczb");
            Console.WriteLine("1 szansa - 2zł\n2 szanse - 5zł\n3 szanse - 11 zł");
            n = int.Parse(Console.ReadLine());
        }
        public static void WypisLosowane()
        {
            Console.Write("Wylosowane liczby to:");
            for (int i = 0; i < 5; i++)
            {
                Console.Write(" "+losowane[i]);
            }
            Console.WriteLine();
        }
        public static void WypisWpisane()
        {
            Console.Write("Twoje liczby to:     ");
            for (int i = 0; i < n; i++)
            {
                Console.Write(" " + wpisane[i]);
            }
            Console.WriteLine();
        }
        public static void PodawanieLiczb()
        {
            for (int i = 0; i < n; i++)
            {
                Console.WriteLine("Podaj liczbę nr. " + (i+1));
                wpisane[i] = int.Parse(Console.ReadLine());
            }
        }
        public static void SprawdzenieLiczb()
        {
            for (int i = 0; i < 5; i++)
            {
                for (int m = 0; m < n; m++)
                {
                    if (wpisane[i] == losowane[n]) k = k + 1;
                    else { }
                }
            }
            if(k==0) Console.WriteLine("\n\nWytypowałeś poprawnie " + k + " liczb!");
            else if(k==1) Console.WriteLine("\n\nWytypowałeś poprawnie " + k + " liczbę!");
            else if (k < 5) Console.WriteLine("\n\nWytypowałeś poprawnie " + k + " liczby!");
            else Console.WriteLine("\n\nWytypowałeś poprawnie " + k + " liczb!");
        }
        static void Main(string[] args)
        {
            Losowanie();
            PodawanieIlosciLiczb();
            PodawanieLiczb();
            Console.Clear();
            WypisLosowane();
            WypisWpisane();
            SprawdzenieLiczb();
            Console.Read();

        }
    }
} 
0

To zostawiasz na początku:

public static int[] wpisane;

to wstawiasz gdzieś pomiędzy wprowadzeniem n a pierwszym użyciem wpisane:

wpisane=new int[n+1];
0

Cały czas podobny błąd. Tym razem na etapie porównania liczb wpisanych z tymi wylosowanymi. Zrobiłem to w ten sposób:
EDIT: Działa, ale tylko w przypadku podania 4, albo więcej liczb. Jeśli się wybiera mniej, niż 4, wyskakuje błąd o za małej tablicy(Index was outside the bounds of the array.)

namespace Loteria
{
    class Program
    {
        public static int n;
        public static int[] losowane=new int[5];
        public static int[] wpisane; <<<<<TUTAJ ZADELKAROWAŁEM
        public static int k;
        public static Random r=new Random();
        public static void Losowanie()
        {
            for (int i = 0; i < 5; i++)
            {
                losowane[i] = r.Next(0, 20);
            }
        }
        public static void PodawanieIlosciLiczb()
        {
            Console.WriteLine("Podaj ilość szans do wylosowania liczb");
            Console.WriteLine("1 szansa - 2zł\n2 szanse - 5zł\n3 szanse - 11 zł");
            n = int.Parse(Console.ReadLine());
        }
        public static void WypisLosowane()
        {
            Console.Write("Wylosowane liczby to:");
            for (int i = 0; i < 5; i++)
            {
                Console.Write(" "+losowane[i]);
            }
            Console.WriteLine();
        }
        public static void WypisWpisane()
        {
            Console.Write("Twoje liczby to:     ");
            for (int i = 0; i < n; i++)
            {
                Console.Write(" " + wpisane[i]);
            }
            Console.WriteLine();
        }
        public static void PodawanieLiczb()
        {
            for (int i = 0; i < n; i++)
            {
                Console.WriteLine("Podaj liczbę nr. " + (i+1));
                wpisane[i] = int.Parse(Console.ReadLine());
            }
        }
        public static void SprawdzenieLiczb()
        {
            for (int i = 0; i < 5; i++)
            {
                for (int m = 0; m < n; m++)
                {
                    if (wpisane[i] == losowane[m]) k = k + 1;
                    else { }
                }
            }
            if(k==0) Console.WriteLine("\n\nWytypowałeś poprawnie " + k + " liczb!");
            else if(k==1) Console.WriteLine("\n\nWytypowałeś poprawnie " + k + " liczbę!");
            else if (k < 5) Console.WriteLine("\n\nWytypowałeś poprawnie " + k + " liczby!");
            else Console.WriteLine("\n\nWytypowałeś poprawnie " + k + " liczb!");
        }
        static void Main(string[] args)
        {
            Losowanie();
            PodawanieIlosciLiczb(); <<TU WPISAŁEM N
            wpisane = new int[n + 1]; <<TU WPISAŁEM DŁUGOŚĆ TABLICY
            PodawanieLiczb();
            Console.Clear();
            WypisLosowane();
            WypisWpisane();
            SprawdzenieLiczb();
            Console.Read();

        }
    }
}
 

Czy o takie coś chodziło?

1

To jest kara za stosowanie jednoliterowych nic nie znaczących nazw zmiennych.
Pomyliłeś i z m

0

O, faktycznie. Dzięki wielkie! To od dzisiaj zaczynam sensownie nazywać zmienne ;)

1
_13th_Dragon napisał(a):

To jest kara za stosowanie jednoliterowych nic nie znaczących nazw zmiennych.
Pomyliłeś i z m

I kto to mówi. :D

2
bnbnowacki napisał(a):

1 szansa - 2zł
2 szanse - 5zł
3 szanse - 11 zł

dobrze że zająłeś się programowaniem, a nie własnym biznesem

0

@gsdfgsdfg, też mi się tak wydaję ;). A najlepsze w tym wszystkim jest to, że cały czas sobie wmawiam, że może coś z tego być.

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