Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不退出程序的情况下在do while循环中添加if语句?_Java - Fatal编程技术网

Java 如何在不退出程序的情况下在do while循环中添加if语句?

Java 如何在不退出程序的情况下在do while循环中添加if语句?,java,Java,我有两门课。这个程序几乎模拟了ATM机。用户将要求存款、取款或查看用户银行帐户的余额 余额将首先设置为零,然后用户可以存款或取款 称为CheckingAccount的第一个类将具有方法而没有主方法,而TestCheckingAccount具有主方法。所有输入和输出都将出现在TestCheckingAccount类中,而CheckingAccount进行计算 如果用户选择存款,则账户余额将添加到用户希望存入其账户的金额中。CheckingAccount类中的getBalance方法返回用户帐户的余

我有两门课。这个程序几乎模拟了ATM机。用户将要求存款、取款或查看用户银行帐户的余额

余额将首先设置为零,然后用户可以存款或取款

称为
CheckingAccount
的第一个类将具有方法而没有主方法,而
TestCheckingAccount
具有主方法。所有输入和输出都将出现在
TestCheckingAccount
类中,而
CheckingAccount
进行计算

如果用户选择存款,则账户余额将添加到用户希望存入其账户的金额中。
CheckingAccount
类中的
getBalance
方法返回用户帐户的余额,而
processDeposit
将用户希望存入的金额添加到余额中,而
processCheck
将用户选择的金额减少到余额中

如果用户选择查看余额,则会打印用户余额

检查帐户类 TestCheckingAccount类 }

该程序运行正常,但我遇到的问题是,在用户完成并退出该程序之前,该程序必须询问用户是否希望存款、取款或查看余额

因此,当程序询问用户是否想存款、取款或查看账户余额时,必须在循环中。我把它放在一个do-while循环中。因此,当我运行程序并询问余额时,打印出余额,然后循环fine,然后程序再次询问他/她是否要取款、存款、查看余额或退出

但当我要求程序取款或存款时,它运行但不循环,而是退出循环


我怎样才能使程序可以取款或存款,但仍然循环并返回菜单,询问用户是否要存款或取款,而不仅仅是结束循环?

您可以使用无限循环并在“退出”条件下中断。此外,您还可以使用关闭
扫描仪
。大概

try (Scanner in = new Scanner(System.in)) {      
  String choice;
  double moneyAdded;
  double moneySubtracted;

  while (true) {
    System.out.println("Deposit");
    System.out.println("Withdraw");
    System.out.println("Balance");
    System.out.println("Exit");
    System.out.println("**********************************************");
    System.out.println("Which operation would you like to use?");
    choice = in.nextLine();

    if (choice.equalsIgnoreCase("Deposit")) {
      System.out.println("How much money would you like to deposit?");
      moneyAdded = in.nextDouble();
      check.processDeposit(moneyAdded);
    } else if (choice.equalsIgnoreCase("Withdraw")) {
      System.out.println("How much money would you like to withdraw?");
      moneySubtracted = in.nextDouble();
      check.processCheck(moneySubtracted);
    } else if (choice.equalsIgnoreCase("Balance")) {
      System.out.printf("$%.2f%n", check.myBalance);
    } else if (choice.equalsIgnoreCase("Exit")) {
      break;
    }
  }
}

我认为现在发生的情况是,它在读取了一个double之后读取了一个空行,并且在
while
条件下没有检查该空行。为了帮助您学习,您应该设置一个断点或一些调试并检查此项

但是,只需使用not(
)来指定何时退出循环,而不是何时留在循环中,这将更容易,这意味着您不需要选择以下选项字符串:

do
{
   ... //this will repeat until they type Exit
}
while (!choice.equalsIgnoreCase("Exit"));
然后还将删除代码:

//else if(choice.equalsIgnoreCase("Exit"))
//{
//    System.exit(0);
//}

使用Scanner的next方法而不是nextLine

choice = in.next();
nextDouble不考虑最后一个换行符,因此它被留给nextLine方法。这意味着下一行在下次请求用户输入(空输入)时将读取换行符。由于输入与do循环继续的要求不匹配,程序将退出

我希望这个答案对你有帮助

//else if(choice.equalsIgnoreCase("Exit"))
//{
//    System.exit(0);
//}
choice = in.next();