Wątek przeniesiony 2018-01-19 18:38 z C# i .NET przez Ktos.

Ćwiczenie - inicjalizacja tablicy jako pola

0

Cześć, uczę się programowania i mam do napisania aplikację konsolową, która pyta się użytkownika o zakres i ilość losowanych liczb, losuje te liczby i na końcu następuje sprawdzenie, czy jedna konkretna liczba została wylosowana.
Chciałbym wiedzieć, dlaczego w moim programie, w metodzie drawNumbers(int qtyToDraw) następuje inicjalizacja tylko pierwszego indeksu tablicy int[] drawedNumbers. Bardzo dziękuję za odpowiedź.

namespace DrawingNumbers
{
    class Drawing
    {
        enum RangeType { Max, Min };
        int qtyToDraw;
        int MinRange;
        int MaxRange;
        int[] drawedNumbers;

        public Drawing()
        {
            Console.WriteLine("Proszę podać ilość liczb do wylosowania");
            this.qtyToDraw = int.Parse(Console.ReadLine());
            Console.WriteLine();
            this.MinRange = selectRange(RangeType.Min);
            Console.WriteLine();
            this.MaxRange = selectRange(RangeType.Max);
            drawedNumbers = new int[this.qtyToDraw];
            drawNumbers(this.qtyToDraw);
            showNumbers();
            checkIfNumberExist();
        }

        private int selectRange(RangeType rangeType)
        {
            int? range = null;
            try
            {
                switch (rangeType)
                {
                    case RangeType.Min:
                        {
                            Console.WriteLine("Proszę podać dolny zakres losowanych liczb: ");
                            range = int.Parse(Console.ReadLine());
                            break;
                        }
                    case RangeType.Max:
                        {
                            Console.WriteLine("Proszę podać górny zakres losowanych liczb: ");
                            range = int.Parse(Console.ReadLine());
                            break;
                        }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            return (int)range;
        }

        private void drawNumbers(int qtyToDraw)
        {
            Random rand = new Random();
            
            foreach(int i in drawedNumbers)
            {
                int random = rand.Next(this.MinRange, this.MaxRange);
                this.drawedNumbers[i] = random;
            }
        }

        private void showNumbers()
        {
            foreach(int i in drawedNumbers)
            {
                Console.WriteLine(i + "");
            }

            Console.WriteLine();
        }

        private void checkIfNumberExist()
        {
            int numberToCheck;
            Console.WriteLine("Wybierz numer do sprawdzenia:");
            numberToCheck = int.Parse(Console.ReadLine());
            bool isExist = false;

            foreach(int i in drawedNumbers)
            {
                if(i == numberToCheck)
                {
                    isExist = true;
                }
            }

            if (isExist)
            {
                Console.WriteLine($"Numer {numberToCheck} istnieje");
            }
            else
            {
                Console.WriteLine($"Numer {numberToCheck} nie istnieje");
            }

            Console.WriteLine();
            Console.ReadKey(true);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Drawing losowanie = new Drawing();
        }
    }
}

0

Używasz złej pętli, powinno być coś takiego:

for (int i = 0; i < drawedNumbers.Length; i++)
{
	drawedNumbers[i] = rand.Next(MinRange, MaxRange);
}

Foreach leci po wartościach w tablicy drawedNumbers, a jako że są zainicjalizowane jako 0 to tylko pod tym indeksem zostanie wylosowana liczba.

0

Tak, masz rację. Bardzo dziękuję!

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