2015-01-09 65 views
0

我創建了一個while循環來爲我的程序創建一個菜單,它將保持循環,直到用戶在控制檯中輸入「Quit」。我的問題是,每當我輸入'Transfer'到控制檯時,if語句都可以很好地運行,但是當它返回到循環的開頭時,消息會打印兩次而不是一次。這與任何其他選項都不會發生。在while循環期間打印兩次System.out.println()

代碼:

int x = 0; 
while(x != 1) { 
    System.out.println("To transfer funds, please type 'Transfer'\n" //Typical message 
       + "To list recent transactions, please type 'Recent'\n" 
       + "To display account details, please type 'Details'\n" 
       + "To quit the application, please type 'Quit'"); 

    String Option1 = "Transfer"; //Variables 
    String Option2 = "Recent"; 
    String Option3 = "Details"; 
    String Option4 = "Quit"; 
    String Menu = ConsoleInput.nextLine(); 

    if (Menu.equals(Option1)) { 
      //Statements 
    } else if(Menu.equals(Option2)){ 
      //Statements 
    } else if(Menu.equals(Option3)){ 
      //Statements 
    } else if(Menu.equals(Option4)){ 
      //End statement 
      x++; 
    } 
} 

編輯:你們當中有些人評論有關在最後else語句x的增量,並說,它應該else語句外面放。它在那裏,因爲當用戶輸入'Quit'到控制檯時,它將退出循環,如果它被放在else語句之外,那麼用戶將無法訪問其他選項。

編輯2(解決方案):我終於解決了這個問題。原來,這是if語句中的掃描語句。我應該已經顯示了完整的代碼給大家看,但我認爲這只是if-else-statements自己。

+0

不應該'x ++'超出最後一個if? – lared

+1

你的代碼適合我。你也可能不應該使用'int x'作爲標誌停止。更清晰的解決方案會像'boolean stop = false; while(!stop){... if(stopConditon)stop = true;}' – Pshemo

+1

我試過你的例子,它看起來很好。問題必須出現在您的「轉移」聲明中。另外,你是否考慮過使用'break'語句而不是採用值0或1的變量?或者在其他方面意義重大? –

回答

0

幾件事情看出來:

  1. 你應該Menu.equalsIgnoreCase(Option1)
  2. ,你應該把x增量while循環之後。除非輸入End,否則永遠不會增加x。

我覺得你真的想要的東西更像

private static String[] options = {"Transfer","Recent","Details","Quit"}; 
private static int C_Transfer = 0; 
private static int C_Recent = 1; 
private static int C_Details = 2; 
private static int C_Quit = 3; 
private static int[] optionCase = {C_Transfer, C_Recent, C_Details,C_Quit); 
private String menu; 
private String message = "To transfer funds, please type 'Transfer'\n" //Typical message 
       + "To list recent transactions, please type 'Recent'\n" 
       + "To display account details, please type 'Details'\n" 
       + "To quit the application, please type 'Quit'" 

System.out.println(message); 
menu = ConsoleInput.nextLine() 
while (!menu.equalsIgnoreCase(options[C_Quit]) { 
    int case = -1; 
    for (int i=0, i < options.length; i++) { 
     if (menu.equalsEgnoreCase(options[i]) { 
      case = i; 
      break; 
     } 
     switch (case) 
     case C_Transfer: { 
      break; 
     } 
     case C_Transfer: { 
      break; 
     } 
     case C_Transfer: { 
      break; 
     } 
     case C_Transfer: { 
      break; 
     } 
     default: { 
      System.out.println(message); 
     } 
     Menu = ConsoleInput.nextLine(); 
    } 
} 
+2

「你永遠不會增加x,除非你輸入Quit」,這似乎是循環點:如果命令是「退出」,那麼增加'x'將會使得外觀條件爲false。 – Pshemo

+3

OP使用'x ++'替代'break' –

+1

「在while循環後立即放置x的增量」將自動退出 –

0

這僅在轉讓選擇權發生的呢?您能否顯示Transfer選項的代碼?可能有指令在那裏打印消息,所以當循環重新開始時你會得到消息打印兩次。

add: 根據您的'傳輸代碼'。看來這個問題與java.util.Scanner的錯誤有關,但我自己對這個工具類沒有把握。但下面的修改後的代碼適用於我:

public static void main(String[] args){ 
     java.util.Scanner ConsoleInput=new java.util.Scanner(System.in); 
     String Menu; 
     String message="To transfer funds, please type 'Transfer'\n" //Typical message 
       + "To list recent transactions, please type 'Recent'\n" 
       + "To display account details, please type 'Details'\n" 
       + "To quit the application, please type 'Quit'"; 
     System.out.println(message); 
       String Option1 = "Transfer"; //Variables 
     String Option2 = "Recent"; 
     String Option3 = "Details"; 
     String Option4 = "Quit"; 
     while(!((Menu=ConsoleInput.nextLine()).equalsIgnoreCase(Option4))){ 
      if(Menu.equalsIgnoreCase(Option1)){ 
       System.out.println("You have selected transfer"); 
       System.out.println("How much would you like to transfer?"); 
       float deduction; 
       float total = 2500; 
       deduction = ConsoleInput.nextFloat(); 
       total = total - deduction; 
       System.out.println("£" + total + " left in account. Transaction recorded."); 
       //Fileoutput.println(sf.format(date) + " - £" + deduction + " taken from account. £" + total + " left in account.\n"); 
       System.out.println(message); 
      }else if(Menu.equalsIgnoreCase(Option2)){ 
       System.out.println("here is your balance...blah, blah, bbla\n"); 
       System.out.println(message); 
      }else if(Menu.equalsIgnoreCase(Option3)){ 
       System.out.println("here is the details...blah, blah, bbla\n"); 
       System.out.println(message); 
      } 
     } 
     System.out.println("Thanks"); 
    } 
+0

我意識到你不能[評論,直到50代表](http://stackoverflow.com/help/privileges/comment),但這*是*評論,而不是*答案*,應該被刪除。 –

+0

[這裏是傳輸選項](http://pastebin.com/PkWb0ZWz)我使用了PasteBin,所以你可以正確地看到它。 –