繁体   English   中英

System.out.println()在while循环中打印两次

[英]System.out.println() printing twice during while-loop

我创建了一个while循环来为程序创建菜单,它将一直循环直到用户在控制台中键入“ Quit”为止。 我的问题是,每当我在控制台中输入“ Transfer”时,if语句就会完美运行,但是当它返回循环的开头时, 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语句本身。

需要注意的几件事:

  1. 您可能应该使用Menu.equalsIgnoreCase(Option1)等。
  2. 您应该在while循环之后放置x的增量。 除非键入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();
     }
}

这仅在“转移”选项上发生吗? 您可以显示转移选项的代码吗? 可能有指令在那儿打印消息,所以当循环重新开始时,您得到了两次打印消息。

添加:根据您的“转移码”。 看来问题与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");
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM