回过头来

时间:2014-02-18 17:38:16

标签: c# while-loop

所以我在我的MainMenu课程中编写了这段代码并且工作正常:

public void Start() //Start method
{
    bool done = false;
    while (!done)  
    {
        ShowMeny();
        SwitchMethod();

        NumChoice = InputHelper.ReadIntegerConsole();
        if (NumChoice == 0) // if the input is 0, set done to true and stop the loop
            done = true;

// ...

然而,在这里我把它写在另一个班级,当你按0时,它应该回到我的MainMenu。为什么我不能使用相同类型的代码?所有这一切都是循环ShowMenu

private void CalcMenu()
{
    bool Done = false;

    while (!Done)
    {
        ShowMenu();
        if (MenuChoice == 0)
            Done = true;
    }
}

如果你在这里按0,它会重复2次然后退出。这是全班:

namespace ConsoleApplication1
{
class WorkingSchedule
{
    int MenuChoice = -1;

    public void Start()
    {
        ShowMenu();
        CalcMenu();
        //LoopOneWeeks();
        //LoopTwoNights
        //ShowResults();

    }

    private void ShowMenu()
    {
        Console.WriteLine("Välj det schema som du vill se:");
        Console.WriteLine("_______________________________");
        Console.WriteLine("1. Visa en lista de veckor du ska jobba");
        Console.WriteLine("2. Visa en lista de nätter du ska jobba");
        Console.WriteLine("0. För att återvända till huvudmenyn");
        MenuChoice = InputHelper.ReadIntegerConsole();
        Console.WriteLine("Ditt val: " + MenuChoice);
    }

    private void CalcMenu()
    {
        bool Done = false;

        while (!Done)
        {
            ShowMenu();
            if (MenuChoice == 0)
            {
                Done = true;
                ReturnMainMenu();
            }
            else if (MenuChoice == 1)
            {

            }
            else if (MenuChoice == 2)
            {

            }
        } 
    }

    private void ReturnMainMenu()
    {
        MenuProgram MPObj = new MenuProgram();
        MPObj.Start();
    }

InputHelper.ReadIntegerConsole是一个输入助手类

3 个答案:

答案 0 :(得分:2)

当你拥有MenuChoice == 0分支时,你实际上并没有退出循环。

private void CalcMenu()
{
    bool Done = false;

    while (!Done)
    {
        ShowMenu();
        if (MenuChoice == 0)
        {
            Done = true;
            //ReturnMainMenu();
        }
        else if (MenuChoice == 1)
        {

        }
        else if (MenuChoice == 2)
        {

        }
    }
    ReturnMainMenu(); //This should only happen when you exit the loop.
}

编辑:

在CalcMenu中再次显示菜单之前,您似乎在Start()中显示菜单。

public void Start()
{
    //ShowMenu();
    CalcMenu();
    //LoopOneWeeks();
    //LoopTwoNights
    //ShowResults();

}

答案 1 :(得分:1)

你需要打破循环,否则它将以无限循环结束。因为Done永远不会成真。

while (!Done)
{
  ShowMenu();           
  if (MenuChoice == 0)
  {
    Done = true;
  }   
}

您的第一种方法有效,因为您正在更改Done循环内的while变量的值,从而打破循环。但在第二种方法中,您没有更改Done的值。它总是假的;因此条件!Done始终为真,循环变为无限。

答案 2 :(得分:0)

以上两个答案都是正确的。为了退出while循环,您需要在循环内部具有退出逻辑。作为建议解决方案的替代方案,您也可以尝试。

while( MenuChoice != 0 )
{
    ShowMenu();
}