Как установить диапазон для элементов в массиве в C# - PullRequest
2 голосов
/ 14 апреля 2020

Я все еще очень плохо знаком с C#, мы должны использовать циклы for, а не методы. Мой вопрос заключается в том, как ограничить значения (от 1 до 25), которые вводит пользователь. «Игра» должна попросить пользователя ввести свои значения, затем он выбрасывает случайное число и проверяет, находится ли оно среди чисел, хранящихся в myArray. .

{
int[] myArray = new int[10];

Console.WriteLine("Write down your numbers");

    for (int i = 0; i < 10; i++)
    {
        Console.WriteLine("Type in values for index nr {0}: ", i);  

// пользователю предлагается ввести 10 значений, мне нужно ограничить и сохранить в качестве элементов значения в диапазоне от 1 до 25, поэтому l oop продолжается (i ++), если пользователь вводит число, выходящее за этот диапазон, то мой l oop должен go сделать шаг назад, как если бы (i -)

        myArray[i] = int.Parse(Console.ReadLine());
    }

    var rand = new Random();                                     //a random number is thrown

    int rand1 = Convert.ToInt32(rand.Next(0, 25));              //random number ranges between 0 and 25

    Console.WriteLine("{0}", rand1);

    for (int i = 0; i < tal.Length; i++)                //checking if random number is among users inputs
    {
        if (tal[i] == rand1)
        {
             Console.WriteLine("The random number {0} is among 
               your values", rand1);
        }

        else
        {
             Console.WriteLine("Random number isn´t among your 
                                 numbers");
        break; 
        }
}

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020
 for (int i = 0; i < 10; i++)
        {
            Console.WriteLine("Type in values for index nr {0}: ", i);
            if (int.TryParse(Console.ReadLine(), out int result) && result >= 0 && result <= 25)
            {
                myArray[i] = result;
            }
            else
            {
                i--;
                Console.WriteLine("Wrong number!");
            }
        }
1 голос
/ 14 апреля 2020

Ваша проблема в том, что вы пытаетесь сохранить индекс i, который указывает вашу текущую позицию в массиве. Одним из решений будет просто уронить его и добавить элемент в коллекцию, пока у вас не будет 10 элементов.

Здесь я взял HashSet<int>, потому что у нас не может быть дубликата в HashSet . Каждый раз, когда вы пытаетесь добавить один, он просто уронит его. Но если вы хотите разрешить дублирование, вы можете использовать простой List<int>.

int collectionSize = 10;
int lowerBound = 1, upperBound = 25;

var userSelectedNumbers = new HashSet<int>();

while (userSelectedNumbers.Count() < collectionSize)
{
    Console.WriteLine($"Enter an int between {lowerBound} and {upperBound} : ");

    var input = Console.ReadLine();

    if (int.TryParse(input, out int value)
        && lowerBound <= value
        && value < upperBound
        )
    {
        userSelectedNumbers.Add(value);
    }
    else {
        Console.WriteLine("Not a valid input!");
    }
}
Console.Clear();
Console.WriteLine(
    $"userSelectedNumbers contains {userSelectedNumbers.Count()} elements : {"
    + string.Join(", ", userSelectedNumbers) + "}"
);

. Затем вы можете проверить, находится ли случайный номер в пределах диапазона, используя Contains:

var random = new Random();
int computerPick = random.Next(0, 25);

Console.WriteLine("Computer picked : " + computerPick);

if (userSelectedNumbers.Contains(computerPick))
{
    Console.WriteLine("You win!");
}
else {
    Console.WriteLine("You loose!");
}

Не забудьте использовать:

using System.Collections.Generic;
using System.Linq;

nb: диапазон определяется с помощью 1 ≤ x < 25, с использованием соглашения W. Dijkstra http://www.cs.utexas.edu/users/EWD/ewd08xx/EWD831.PDF

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