Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 函数调用时是否执行循环?_C#_Function_Loops - Fatal编程技术网

C# 函数调用时是否执行循环?

C# 函数调用时是否执行循环?,c#,function,loops,C#,Function,Loops,我正在尝试编写一个由一些项目组成的程序(目前只有两个项目)。它在控制台中没有显示任何错误,但是当我尝试多次调用Main函数时,它不会执行内部的循环。顺便说一下,这是代码 public static class Program { public static string input = Convert.ToString(Console.ReadLine()); public static int health = 100; public static int ener

我正在尝试编写一个由一些项目组成的程序(目前只有两个项目)。它在控制台中没有显示任何错误,但是当我尝试多次调用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”

我还注意到,当您调用
ItemUser
方法时,您会更新
Items
类的静态变量,但在
StatusChecker
方法中,您会写入
程序
类的控制台变量。它们实际上是不同的,因此我认为在您的
StatusChecker
方法中,您可能需要执行以下操作:

public static void StatusChecker()
{ 
    Console.WriteLine("Your health is " + Items.health);
    Console.WriteLine("Your energy is " + Items.energy);
}

您正在此处分配一个变量:

 public static string input = Convert.ToString(Console.ReadLine());
因此,下次调用“Main”方法时,它将使用第一次执行应用程序时键入的值。如果你想让它每次都问你,你需要这样做:

 public static void Main()
 {
     input = Convert.ToString(Console.ReadLine());
     ...
 } 
另一件事是,如果您输入“状态”,它可以在第一次呼叫后退出。
第三个问题是,这不是编写程序的“好”方法。Main方法应该在应用程序启动时执行,因为它是入口点(更多信息)。

没有任何循环,只有条件。你是如何执行程序的?没有对函数的“特殊处理”,不管它们是否包含循环。你的函数不包含循环。你没有循环,所以你需要展示你的实际目标,这样人们才能帮助你。此外,
main()
表示您的程序;没有从外部读取/写入数据,您的数据在您的程序中是硬编码的,因此每次调用您的程序时,您只需从头开始重新启动它,即获得相同的结果![查看]避免将用户输入ReadLine()用于设置静态输入字段。将行[input=Convert.ToString(Console.ReadLine());]移动到Main()过程,查看GetItems()的结果会发生什么
 public static void Main()
 {
     input = Convert.ToString(Console.ReadLine());
     ...
 }