当前位置: 首页 > 知识库问答 >
问题:

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

颛孙昆
2023-03-14

我创建了一个while循环来为我的程序创建菜单,它将一直循环,直到用户在控制台中键入“退出”。我的问题是,每当我在控制台中输入'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++;
    }
}

编辑:你们中的一些人评论了最后一个其他语句中x的增量,并说它应该放在其他语句之外。它在那里是因为当用户在控制台中键入“退出”时,它将退出循环,如果它被放在其他语句之外,那么用户将无法访问其他选项。

编辑2(解决方案):我终于解决了这个问题。原来是if语句中的scanner语句。我应该向大家展示完整的代码,但我认为这只是if-else语句本身。


共有2个答案

公西星文
2023-03-14

这只发生在转会选择权上,对吗?你能告诉我转车选项的代码吗?可能那里有打印消息的指令,所以当循环重新开始时,会打印两次消息。

添加:基于您的“转账代码”。这个问题似乎与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");
    }
万俟穆冉
2023-03-14

要注意的几件事:

  1. 您可能应该Menu.equalsIgnoreCase(Option1)etc.
  2. YOu应该把x的增量放在time循环之后。除非键入结束,否则永远不会递增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();
     }
}
 类似资料:
  • 我只想用下面的公式从任何给定的数字创建一个因子列表。我不允许使用列表,因此,我模仿使用字符串如下: 例如,假设我们选择num=12:

  • 因此,我当前遇到的问题是,在我完成所有步骤后,“Enter your command(reverse,replace first,replace last,remove all,remove)”语句被打印了两次。 我相信正在发生的是循环执行了两次,但我不知道为什么。如果能帮助解决这个问题,我们将不胜感激。抱歉,如果我的代码格式不好,还在学习如何正确的格式。

  • 大家好,我被一个问题困住了,想不出解决办法。我使用的是while循环,do while循环和for。我知道我的前两个while循环是正确的,我试图完成的是让我的do while循环和for语句打印出与我的第二个while循环相同的东西。 输入要打印的消息? 你好 输入要打印邮件的次数。输入1-20之间的值: 5 使用do-while循环输出... 第6.0行-你好 do-while循环中的时间..

  • 在下面的代码中,我试图提示用户输入一个数字,如果它小于1,则要求输入另一个正数。 在输入正数之前,它似乎一直在工作,但在给出正数后,程序将打印最终的错误消息。 输入正数后,如何阻止打印此错误消息?

  • 问题内容: http://i.stack.imgur.com/XvHm5.png 当我单击“打开”按钮时,它将开始在JTextField上发送垃圾邮件1。而是冻结整个GUI,包括关闭按钮。我正在使用while循环,当您再次单击jButton时,它将停止。因为jButton被冻结,所以我无法停止该程序。我已经读过线程和多线程将有所帮助,但是所有教程都太复杂了,以至于我无法理解。他们说将循环和GUI放

  • 我正在写一份简单的银行申请书。在我的程序中,我使用了while循环。如果用户输入错误,它将再次提示用户输入。 现在的问题是我无法编写任何语句。它总是显示错误(比如:unreachable语句),最终该行不会被打印出来。 我该怎么解决这个问题? [我之所以需要使用,是因为我想打印用户输入的所有信息。] 我正在从事的项目: