почему вывод в лотерейный код не работает? - PullRequest
0 голосов
/ 29 июня 2018

Я должен создать код в c # (Microsoft Visual Studio 2017), который позволяет пользователю вводить шесть чисел, а затем сравнивать их с массивом из шести случайно сгенерированных чисел (без дубликатов).

Если у пользователя есть одно совпадение, он должен получить сообщение о том, что у него было одно совпадение, и разные сообщения для двух или трех совпадений и т. Д.

Это то, что я получил до сих пор:

static bool isValueInArray(int value, int[] a)
    {
        for (int i = 0; i < a.Length; i++)
        {
            if (a[i] == value)
            {
                return true;
            }
        }

        return false;
    }

  static void Main(string[] args)
    {
        int min = 0;
        int max = 6;
        Random randnum = new Random();//random number generator
        int[] numbers = new int[6];// generates six numbers
        for (int i = 0; i < numbers.Length; i++)
        {
            numbers[i] = randnum.Next(min, max);//sets the numbers between 0 to 6
            if(isValueInArray( i, numbers))
            {
                numbers[i] = randnum.Next(min, max);
            }
        }

        try
        {
            Console.WriteLine("Hello and Welcome to our little game of lottery! lets see just how much luck you got!"); // greetings and instructions
            Console.WriteLine("You'll now get to choose 6 different numbers between 0 to 6 to play with.");
            Console.WriteLine("Go ahead and type them in.");

            int[] lottery = new int[6];

            for (int i = 0; i < lottery.Length; i++)
            {
                lottery[i] = int.Parse(Console.ReadLine()); // array to catch six numbers input
                if (lottery[i] > 6)//checking if the numbers fit between 0 and 6
                {
                    Console.WriteLine("whoops! the number you enetered isn't in range! please try again ^^");
                    break;
                }

                int x = 6;
                for (int a = 0; a < lottery.Length; a++)
                {
                    for (int b = 0; b < numbers.Length; b++)
                    {
                        if (lottery[a] == numbers[b])
                        {
                            a++;
                            x--;
                            if (x == 6)
                            {
                                Console.WriteLine("six match");
                                break;
                            }
                            else if (x == 5)
                            {
                                Console.WriteLine("five match");
                                break;
                            }
                            else if (x == 4)
                            {
                                Console.WriteLine("four match");
                                break;
                            }
                            else if (x == 3)
                            {
                                Console.WriteLine("three match");
                                break;
                            }
                            else if (x == 2)
                            {
                                Console.WriteLine("two match");
                                break;
                            }
                            else if (x == 1)
                            {
                                Console.WriteLine("one match");
                                break;
                            }

                        }
                    }
                }
            }
        }

        catch (FormatException)// checking if the input is in char format
        {
            Console.WriteLine("only numbers please!");
        }
    }

Моя проблема с выводом. Кажется, что программа перебирает все опции «else if» и печатает их все, вместо того, чтобы выбирать и печатать только один из них.

Ответы [ 3 ]

0 голосов
/ 29 июня 2018

У вас все смешано. Запишите шаги:

  1. Генерация чисел
  2. Получить ввод от пользователя
  3. Количество совпадений
  4. Печать результатов

Каждый шаг должен выполняться отдельно.

// These should be the min/max lottery numbers
int min = 1;
int max = 100;

int numberOfLotteryNumbers = 6;
// Renamed for clarity
int[] lotteryNumbers = new int[numberOfLotteryNumbers];
int[] userNumbers = new int[numberOfLotteryNumbers];

// Step 1 - generate numbers
for (int i = 0; i < lotteryNumbers.Length; i++) {
    int randomNumber;
    do {
       randomNumber = randnum.Next(min, max);
    } while (isValueInArray(randomNumber, lotteryNumbers));
    lotteryNumbers[i] = randomNumber;
}

// Step 2 - get numbers from user
for (int i = 0; i < lottery.Length; i++) {
    int userInput;
    do {
        userInput = int.Parse(Console.ReadLine());
    } while (userInput < min || userInput > max || isValueInArray(userInput, userNumbers));
    userNumbers[i] = userInput;
}

// Step 3 - calc matches
int matches = 0;
for (int i = 0; i < userNumbers.Length; i++) {
    if (isValueInArray(userNumbers[i], lotteryNumbers) {
        matches += 1;
    }
}

// Step 4 - print results
Console.WriteLine("There are {0} matches.", matches);
0 голосов
/ 29 июня 2018

Возможно, вам придется изменить порядок блоков кода таким образом, чтобы сначала получить пользовательский ввод, сначала рассчитать количество совпадений, а затем отобразить результаты в виде следующего кода:

Примечание. Ваш подход к гарантии того, что уникальные числа в случайно сгенерированном номере не будут работать так, как вы ожидаете, вы передаете «i», где вы, возможно, захотите передать «numbers [i]» взамен isValueInArray ». функция. Оставьте в стороне идею, что вы всегда будете заканчиваться значениями 0-5 в массиве, так как вы хотите 6 чисел.

            int min = 0;
            int max = 6;
            Random randnum = new Random();//random number generator
            int[] numbers = new int[6];// generates six numbers
            for (int i = 0; i < numbers.Length; i++)
            {
                numbers[i] = randnum.Next(min, max);//sets the numbers between 0 to 6
                if (isValueInArray(i, numbers))
                {
                    numbers[i] = randnum.Next(min, max);
                }
            }

            try
            {
                Console.WriteLine("Hello and Welcome to our little game of lottery! lets see just how much luck you got!"); // greetings and instructions
                Console.WriteLine("You'll now get to choose 6 different numbers between 0 to 6 to play with.");
                Console.WriteLine("Go ahead and type them in.");

                int[] lottery = new int[6];

                int x = 0;
                //read user numbers
                for (int i = 0; i < lottery.Length; i++)
                {
                    lottery[i] = int.Parse(Console.ReadLine()); // array to catch six numbers input
                    while (lottery[i] > 6)//checking if the numbers fit between 0 and 6
                    {
                        Console.WriteLine("whoops! the number you enetered isn't in range! please try again ^^");
                        lottery[i] = int.Parse(Console.ReadLine()); // array to catch six numbers input
                    }
                }

                //count number of matches
                for (int a = 0; a < lottery.Length; a++)
                {
                    for (int b = 0; b < numbers.Length; b++)
                    {
                        if (lottery[a] == numbers[b])
                        {
                            //a++;
                            x++;
                            break;
                        }
                    }
                }

                //display results
                if (x == 6)
                {
                    Console.WriteLine("six matches");
                }
                else if (x == 5)
                {
                    Console.WriteLine("five matches");
                }
                else if (x == 4)
                {
                    Console.WriteLine("four matches");
                }
                else if (x == 3)
                {
                    Console.WriteLine("three matches");
                }
                else if (x == 2)
                {
                    Console.WriteLine("two matches");
                }
                else if (x == 1)
                {
                    Console.WriteLine("one match");
                }

            }

            catch (FormatException)// checking if the input is in char format
            {
                Console.WriteLine("only numbers please!");
            }
            Console.Read();
        }
0 голосов
/ 29 июня 2018

Вы можете использовать счетчик для достижения своей цели. Просто увеличьте значение счетчика при совпадении:

int counter = 0;
for (int i = 0; i < lottery.Length; i++)
{ 
  // .. 
  if (x == number)
  {
      counter++; 
      break;
  } 
  // ..
} 
Console.WriteLine("You have " + counter + " matches");
...