微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

函数在被调用时是否执行循环?

如何解决函数在被调用时是否执行循环?

我正在尝试编写一个包含一些项目的程序(目前只有2个项目)。它在控制台中没有显示任何错误,但是当我尝试多次调用Main函数时,它不会执行内部循环。这是代码

 public static class Program
{

    public static string input = Convert.ToString(Console.ReadLine());
    public static int health = 100;
    public static int energy = 100;
    

    public static void Main()
    {
        Console.WriteLine("This is a game used for testing items");
        Console.WriteLine("Would you like to use items or get them? (Typing in status shows the value of your health and energy)");
        if (Program.input == "get")
        {
            Items.GetItems();
        }

        if (Program.input == "use")
        {
            ItemUser();
        }

        if (Program.input == "status")
        {
            StatusChecker();
        }

    }
    public static void StatusChecker()
    { 
        Console.WriteLine("Your health is " + Program.health);
        Console.WriteLine("Your energy is " + Program.energy);
    }
    public static void ItemUser()
    {
        Console.WriteLine("What do you want to use?");
        string useChecker = Convert.ToString(Console.ReadLine());
        if (useChecker == "healthPotion")
          {
            health += 100;
            Items.healthPotion--;
          }
        if (useChecker == "energyDrink")
           {
            energy += 100;
            Items.energyDrink--;
           }

    }
}
public static class Items
{
    public static int healthPotion = 0;
    public static int energyDrink = 0;
    public static void GetItems()
    {
        Console.WriteLine();
        string itemChecker = Convert.ToString(Console.ReadLine());
        if ( itemChecker == "health potion")
        {
            healthPotion++;
            Program.Main();
        }
        if (itemChecker == "energy drink")
        {
            energyDrink++;
            Program.Main();
        }

    
    }

因此,我希望程序在更新它们后获取值,但是在多次调用Main方法之后它只是停止了。谁能帮我? (我不太擅长编码,因此我无法编写出真正有效的代码

解决方法

Main方法内部没有任何循环,并且每次运行应用程序时都从头开始,每个变量都包含初始值。如果我正确理解了您要实现的目标,建议您编写这样的Main方法进行循环,该循环将向用户询问命令,直到用户输入"quit":>

    static void Main(string[] args)
    {
        Console.WriteLine("This is a game used for testing items");
        
        while (true)
        {
            Console.WriteLine("Would you like to use items or get them? (Typing in status shows the value of your health and energy)");
            string userAnswer = Console.ReadLine();

            if (userAnswer == "quit") break;

            if (userAnswer == "get")
            {
                Items.GetItems();
            }

            if (userAnswer == "use")
            {
                ItemUser();
            }

            if (userAnswer == "status")
            {
                StatusChecker();
            }
        }
    }

我还注意到,当您调用ItemUser方法时,您将更新Items类的静态变量,但是在StatusChecker方法中,您将写入{{1} }类。它们实际上是不同的,所以我认为在您的Program方法中,您可能需要执行以下操作:

StatusChecker
,

您要在此处分配变量:

 public static string input = Convert.ToString(Console.ReadLine());

因此,下次您调用“ Main”方法时,它将使用您在首次执行应用程序时键入的值。如果您希望它每次都问,则需要执行以下操作:

 public static void Main()
 {
     input = Convert.ToString(Console.ReadLine());
     ...
 } 

另一件事是,如果您键入“ status”,它可以在第一次通话后退出。 问题3是这不是编写程序的“好”方式。应该在应用程序启动时执行Main方法,因为它是入口(更多关于here的信息)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。