所以我在我的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是一个输入助手类
答案 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();
}