【问题标题】:How to add if statement in do-while loop without the program being exited?如何在不退出程序的情况下在 do-while 循环中添加 if 语句?
【发布时间】:2016-04-07 13:33:30
【问题描述】:

我有 2 节课。该程序几乎可以模拟 ATM。用户将要求存款、取款或查看用户银行账户的余额。

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

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

如果用户选择存款,那么账户的余额将被添加到用户想要存入他/她的账户的金额中。 CheckingAccount 类中的 getBalance 方法返回用户帐户的余额,而 processDeposit 将用户想要存款的金额添加到余额中,而 processCheck 将用户选择的金额减少到余额中。

如果用户选择查看余额,那么它将打印用户余额。

CheckingAccount 类

public class CheckingAccount{
    double myBalance = 0;

    public double getBalance(){
        return myBalance;
    }

    public void processDeposit(double amount){
        myBalance += amount;
    }

    public void processCheck(double amount){
        myBalance -= amount;
    }
}

TestCheckingAccount 类

import java.util.Scanner;
public class TestCheckingAccount {

public static void main(String[] args) {

    CheckingAccount check = new CheckingAccount();

    Scanner in = new Scanner(System.in);

    String choice;
    double moneyAdded;
    double moneySubtracted;

    do
    {
        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);
        }

        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"))
        {
            System.exit(0);
        }

    }
    while(choice.equalsIgnoreCase("Deposit")||choice.equalsIgnoreCase("Withdraw")||choice.equalsIgnoreCase("Balance"));

    in.close();

}

}

程序运行良好,但我遇到的问题是程序必须询问用户是否要存款、取款或查看余额,直到用户完成并退出程序。

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

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

我如何制作程序,以便它可以取款或存款但仍循环并返回到询问用户是否要存款或取款的菜单,而不仅仅是结束循环?

【问题讨论】:

    标签: java


    【解决方案1】:

    您可以在“退出”条件下使用无限循环和break。此外,您可以使用try-with-resources close statement 关闭您的Scanner。比如,

    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;
        }
      }
    }
    

    【讨论】:

      【解决方案2】:

      使用 Scanner 的 next 方法而不是 nextLine。

      choice = in.next();
      

      nextDouble 不考虑最后一个换行符,因此它留给 nextLine 方法。这意味着 nextLine 在下一次询问用户输入(空输入)时会读取换行符。由于输入不符合do循环继续执行的要求,程序将退出。

      希望答案对你有所帮助。

      【讨论】:

        【解决方案3】:

        我认为正在发生的事情是它在读取双精度后读取了一个空行,并且在while 条件中没有进行检查。为了帮助您学习,您应该设置一个断点或进行一些调试并检查它。

        但是,使用 not (!) 指定何时退出循环会更容易,而不是希望留在循环中,这意味着您不需要到选项字符串的repeat the comparisons

        do
        {
           ... //this will repeat until they type Exit
        }
        while (!choice.equalsIgnoreCase("Exit"));
        

        您还可以删除代码:

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

        【讨论】:

          猜你喜欢
          • 2016-06-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-07
          • 2022-01-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多