Можно ли вернуть ранее возвращенную переменную? - PullRequest
0 голосов
/ 09 января 2019

Я работаю над своего рода Угадайкой для школьного проекта, но столкнулся с проблемой при попытке вернуть ранее возвращенную переменную. Я не уверен, является ли это, потому что я не закончил программу, или это то, что я упустил из виду. Цель этого упражнения - генерировать и использовать конкретные методы на основе заданных параметров, в противном случае я бы написал свой текущий код совсем по-другому.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AdvGuessNumber
{
    class Program
    {
        static void Main(string[] args)
        {
        }
        static string Input(string promptString)
        {
            Console.WriteLine(promptString);
            string inputString = Console.ReadLine();
            return inputString;
        }
        static int IntInput(string promptString)
        {
            bool isIntInput = false;
            Console.WriteLine(promptString);
            while (isIntInput == false){
                try
                {
                    Input(promptString);
                    inputInt = Convert.ToInt32(inputString);
                    isIntInput = true;
                }
                catch (FormatException)
                {
                    isIntInput = false;
                    continue;
                }
            }
            return inputInt;

        }
        static int GenerateNumber()
        {
            Random rand = new Random();
            int n = rand.Next(1, 100);
            return n;
        }
        static int GetGuess()
        {
            IntInput("Please enter an integer");
            return inputInt; //Trying to reference this from IntInput method


        }

    }
}

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Если вы спрашиваете, можно ли передать возвращаемое значение из одного метода в другой, ответ - да! Фактически, именно так работает recursion , когда метод вызывает себя до тех пор, пока не будет достигнуто известное условие, а затем стек вызовов раскручивается и возвращаемые значения передаются обратно через все вызовы, пока не дойдут до оригинала. вызывающий.

Вот пример, который показывает, как один метод использует возвращаемое значение другого метода в своей операции. Обратите внимание, что GetInt вызывает GetString внутри условия while, и если возвращаемая строка не может быть преобразована в int, то int.TryParse завершается неудачно, и условие while выполняется снова и снова ( пока не пройдет int.TryParse, после чего переменная result содержит преобразованное значение):

static string GetString(string prompt)
{
    Console.Write(prompt);
    return Console.ReadLine(); // Return the result of the call to ReadLine directly
}

static int GetInt(string prompt)
{
    int result;
    while (!int.TryParse(GetString(prompt), out result)) ; // Empty while loop body
    return result;
}

Вот еще один пример с множеством такого рода взаимодействия:

public class Program
{
    private static readonly Random Rnd = new Random();

    private static string GetString(string prompt)
    {
        Console.Write(prompt);
        return Console.ReadLine();
    }

    private static int GetInt(string prompt)
    {
        int result;
        while (!int.TryParse(GetString(prompt), out result)) ;
        return result;
    }

    private static ConsoleKeyInfo GetKey(string prompt)
    {
        Console.Write(prompt);
        return Console.ReadKey();
    }

    private static bool PlayGame()
    {
        Console.Clear();
        Console.WriteLine("Guessing Game");
        Console.WriteLine("-------------");
        Console.WriteLine("I'm thinking of a number between 1 and 100.");
        Console.WriteLine("Let's see how many guesses it takes you to find it!\n");

        int input, guesses = 0, myNumber = Rnd.Next(1, 101);
        var message = "Enter your guess (or '0' to quit): ";

        for (input = GetInt(message);            // Initialize input to user's value
            input != 0 && input != myNumber;     // Iterate until they get it or enter 0
            input = GetInt(message), guesses++)  // Get a new value on each iteration
        {
            Console.WriteLine(input < myNumber ? "Too low!" : "Too high!");
        }

        Console.WriteLine(input == myNumber
            ? $"Correct! That took {guesses} guesses."
            : $"Sorry you didn't get it! The number was: {myNumber}.");

        // Here we call Equals directly on the result of GetString
        return GetString("\nDo you want to play again (y/n)? ")
            .Equals("y", StringComparison.OrdinalIgnoreCase);
    }

    private static void Main()
    {
        while (PlayGame()) ; // Empty while loop body - keeps looping until they say "no"
        GetKey("Done! Press any key to exit...");
    }
}
0 голосов
/ 09 января 2019

Если я правильно понял ваш вопрос, вы можете просто:

    static int GetGuess()
    {
        return IntInput("Please enter an integer");
    }

Если вам нужно что-то сделать после IntInput, вы можете сначала сохранить значение в переменной:

    static int GetGuess()
    {
        int value = IntInput("Please enter an integer");

        // Do something else here...

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