2014-02-18 37 views
0

所以我在MainMenu類編寫這些代碼,它工作得很好:讓我們回到了一個while循環

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

「MenuChoice」聲明在哪裏,它在哪裏分配? –

+0

@MichaelDunlap它是一個實例變量。 – Baxtex

+0

並且'ShowMenu()'調用是否包含分配給'MenuChoice'的代碼? –

回答

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再次顯示菜單前,開始)菜單(。

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

} 
+0

是的,我看到了,並糾正它,現在它退出,但菜單重複了2次。 – Baxtex

+0

鑑於您的舉動完成問題,請參閱我的新答案。 –

+0

我試過了,但它給了我相同的結果。如果我輸入0,那麼菜單重複,如果我再次按0,我確實返回到我的MainMenu。爲什麼這個菜單重複兩次? – Baxtex

1

你需要打破循環,否則就會結束,因爲無限循環。因爲Done永遠不會成爲現實。

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

你的第一個方法的工作,因爲你正在改變while環打破了循環內部Done變量的值。但在第二種方法中,您不會更改Done的值。它總是虛假的;所以條件!Done始終爲真,循環變得無限。

0

以上兩個答案都是正確的。爲了退出你的while循環,你需要在循環內部有退出邏輯。作爲建議解決方案的替代方案,您也可以嘗試。

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