Véletlen szám találgatásokra nem működik a C #

szavazat
-3

Én próbálok a véletlenszám találgatásokra dolgozik. A program fut, de ez nem így nyertél üzenet, amikor belép a megfelelő számú és az emlékeztető funkciót nem ad a visszacsatolás azt kellene is. Minden segítséget nagyra értékelik.

using System;

namespace randomNumberGame
{
    class Program
    {
        static void Main(string[] args)
        {
            Random r = new Random();
            var val = r.Next(1, 100);
            var guess = 0;
            bool correct = false;
            var attemptsLeft = 5;


            Console.WriteLine(I'm thinking of a number between 1 and 100.);

            while (!correct && attemptsLeft >=  1)
            {

                Console.Write(You have  + attemptsLeft +  lives left. Please enter your Guess: );
                string input = Console.ReadLine();
                var message = ;
                var difference = val - guess;

                if (!int.TryParse(input, out guess))
                {
                    Console.WriteLine(That's not a number.);
                    continue;
                }
                if (difference == 0)
                {
                    Console.WriteLine(You have won);
                    correct = true;
                }


                else
                {

                    if (Math.Abs(difference) >= 50)
                    {
                        message = Math.Sign(difference) == -1 ? Very High : Very Low;
                    }
                    else if (Math.Abs(difference) < 50 && Math.Abs(difference) >= 20)
                    {
                        message = Math.Sign(difference) == -1 ? High : Low;
                    }
                    else if (Math.Abs(difference) < 20 && Math.Abs(difference) >= 10)
                    {
                        message = Math.Sign(difference) == -1 ? Moderatley High : Moderately Low;
                    }
                    else if (Math.Abs(difference) < 10)
                    {
                        message = Math.Sign(difference) == -1 ? Somewhat High : Somewhat Low;
                    }
                    else Console.WriteLine(???);
                }
                attemptsLeft--;


            }


        }
    }
}
A kérdést 10/10/2019 00:46
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
0

„Ez nem így nyertél üzenet, amikor belép a helyes számot”

Ami azt illeti, nem! De akkor a program kilép olyan gyorsan, hogy soha nem látja. Ennek megoldására hozzá egy sort, hogy megvárja, hogy a felhasználó megnyom egy gombot a végén a Mainmódszert, így láthatja a végeredményt:

// Add this as the last line of the main method:
Console.ReadKey();

„Az emlékeztető funkciót nem ad a visszacsatolás ez állítólag túl”

Ez azért van, mert soha kimenet a célzást üzenetet! Végén a whilehurok, adjunk hozzá egy sort erre:

// Add this as the last line of the while loop:
Console.WriteLine(message);

Ezek a dolgok könnyen megtalálható, ha egyszerűen csak meg egy töréspontot a kódját (Vistal Studio, kattintson a bal margó melletti egyik vonal és egy piros pont jelenik meg (vagy nyomja meg az F9)). Akkor menj végig a kódot F10, és meg lehet nézni az értékeket a lokális változók változnak, és mi történik, lépésről-lépésre.


Egy másik módja, hogy segítsen elkerülni a problémákat (és szűkítéséhez, ahol előfordulnak), hogy vegye ki darabokat a kódot, hogy nem valami különleges, és betette egy módszer. Ez megkönnyíti a hibakeresést hosszú távon.

Például tudjuk írni módszereket, melyek a húr, hogy megjelenjen a felhasználó számára a gyors bemeneti és vissza erősen típusos érték alapján bejegyzést. Mi is van ezeknek a módszereknek figyelembe az opcionális értékelési módszer, amely használható annak ellenőrzésére, hogy a bemeneti léptek esik az érvényes tartományon (például egy számot 1 és 100 között, vagy olyan nevet, amely nem hosszabb, mint 25 karakter):

public static string GetStringFromUser(string prompt, 
    Func<string, bool> validator = null)
{
    string result;
    var cursorTop = Console.CursorTop;

    do
    {
        ClearSpecificLineAndWrite(cursorTop, prompt);
        result = Console.ReadLine();
    } while (!(validator?.Invoke(result) ?? true));

    return result;
}

public static int GetIntFromUser(string prompt, 
    Func<int, bool> validator = null)
{
    int result;
    var cursorTop = Console.CursorTop;

    do
    {
        ClearSpecificLineAndWrite(cursorTop, prompt);
    } while (!int.TryParse(Console.ReadLine(), out result) ||
                !(validator?.Invoke(result) ?? true));

    return result;
}

private static void ClearSpecificLineAndWrite(int cursorTop, 
    string message)
{
    Console.SetCursorPosition(0, cursorTop);
    Console.Write(new string(' ', Console.WindowWidth));
    Console.SetCursorPosition(0, cursorTop);
    Console.Write(message);
}

Azt is levelet segítő módszer, hogy a „különbség string”, mely ugyancsak a találgatás, a számot, és a minimum és maximum értékek, akkor számítani százalékában milyen közel voltak, majd visszatér a megfelelő szöveg:

public static string GetDifferenceString(int guess, int number, 
    int minVal, int maxVal)
{
    var percentAway = 
        Math.Abs(guess - number) / (double)(maxVal - minVal) * 100;
    var direction = guess - number > 0 ? "High" : "Low";

    if (percentAway < 10) return $"Very close, but {direction}";
    if (percentAway < 20) return $"Just a little {direction}";
    if (percentAway < 30) return $"Somewhat {direction}";
    if (percentAway < 40) return $"Moderately {direction}";
    if (percentAway < 50) return $"{direction}";
    return $"Very {direction}";
}

Ez egyszerűsíti a fő kód eltávolításával hurkok és eredmények ellenőrzésére onnan, és lehetővé teszi számunkra összpontosítson a fő feladatok:

static void Main(string[] args)
{
    var randomNumber = new Random().Next(1, 101);
    var maxAttempts = 5;
    var guess = 0;

    Console.WriteLine("I'm thinking of a number between 1 and 100.");

    for (int attempt = 0; attempt < maxAttempts; attempt++)
    {
        Console.WriteLine($"You have {maxAttempts - attempt} " + 
            $"out of {maxAttempts} attempts remaining.");

        guess = GetIntFromUser("Please enter your guess (1 - 100): ", 
            i => i > 0 && i < 101);

        if (guess == randomNumber)
        {
            Console.WriteLine($"You have won in {attempt + 1} tries!");
            break;
        }

        Console.WriteLine(GetDifferenceString(guess, randomNumber, 1, 100));
    }

    if (guess != randomNumber)
    {
        Console.WriteLine("Sorry, you lose! The number was: " + 
            $"{randomNumber}");
    }

    GetKeyFromUser("\nDone! Press any key to exit...");
}
Válaszolt 10/10/2019 01:44
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more