我的代码不会停止循环打印

t9eec4r0  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(245)
import java.util.InputMismatchException;
import java.util.Scanner;
public class Bank
{
    double balance = 0;
    double amount = 0;

    Scanner in = new Scanner(System.in);

    int userChoice;
    BankAccount account1 = new BankAccount();
    boolean quit = false;
    {
        do {
            System.out.println("Your Choice: ");
            System.out.println("For Deposit type 1");
            System.out.println("For Withdraw type 2");
            System.out.println("For Check Balance type 3");
            System.out.println("Type 0 to quit");
            userChoice = in.nextInt();
            switch (userChoice) {
            case 1:

                //Deposit Money
                boolean inputInvalid = false;

                do {
                    System.out.println("How Much would you like to deposit?");
                    try {
                        in.useDelimiter("\n");
                        amount = in.nextDouble();
                        inputInvalid = false;
                    } catch(InputMismatchException ime) {
                        System.out.println("Invalid input. Try Again");
                        inputInvalid = true;
                    }
                } while (inputInvalid);

                System.out.println("Depositing: " + amount);
                account1.deposit(amount);
                //balance = amount + balance;
                break;
            case 2:
                //Withdraw money
                boolean InvalidInput = false;

                do {
                    System.out.println("How Much would you like to withdraw?");
                    try {
                        in.useDelimiter("\n");
                        amount = in.nextDouble();
                        InvalidInput = false;
                    } catch(InputMismatchException ime) {
                        System.out.println("Invalid input. Try Again");
                        InvalidInput = true;
                    }
                } while (InvalidInput);

                System.out.println("Withdrawing: " + amount);
                account1.withdraw(amount);
                //balance = balance - amount;
                break;
            case 3:
                //check balance
                System.out.println("Checking Balance.");
                account1.getBalance();

                System.out.println(account1.balance);
                break;
            case 0:
                System.out.println("Thanks for Using BankAccount Banking System!");
                quit = true;
                break;
            default:
                System.out.println("Error: Choice not recognized please choose again.");
                continue;
            }

            if (userChoice ==  0)
                quit = true;
        } while
        (!quit);
    }
}

我的代码工作正常,但我似乎不明白为什么它不会停止重复打印我的错误消息给用户。如果有人能指出我的错误,那就太棒了。我在另一个问题中有同样的代码,但是他们修复了我在上一个问题中遇到的问题,并且无法回答这里出现的问题。

vmpqdwk3

vmpqdwk31#

试试这个

String value = in.nextLine();
            String v="";
            for(int i=0;i<value.length();i++)
                if(value.charAt(i)!='\n')
                    v+=value.charAt(i);

            double amount =-1;
            if(v!=null)
                amount = Double.parseDouble(v);
qcuzuvrc

qcuzuvrc2#

您需要从代码中删除或注解掉以下行:

in.useDelimiter("\n");

这将导致字符“\n”传递给 amount = in.nextDouble() ,从而引发inputmismatchexception,从而导致无限循环。
更新:工作代码和示例输出,方便您使用:

import java.util.InputMismatchException;
import java.util.Scanner;

public class Bank {
    public static void main(String[] args) {
        double balance = 0;
        double amount = 0;

        @SuppressWarnings("resource")
        Scanner in = new Scanner(System.in);

        int userChoice;
        BankAccount account1 = new BankAccount();
        boolean quit = false;
        {
            do {
                System.out.println("Your Choice: ");
                System.out.println("For Deposit type 1");
                System.out.println("For Withdraw type 2");
                System.out.println("For Check Balance type 3");
                System.out.println("Type 0 to quit");

                System.out.print("User Input :");
                userChoice = in.nextInt();

                switch (userChoice) {
                    case 1:

                    // Deposit Money
                    boolean inputInvalid = false;

                    do {
                        System.out.println("How Much would you like to deposit?");
                        try {
                            // in.useDelimiter("\n");
                            amount = in.nextDouble();
                            inputInvalid = false;
                        } catch (InputMismatchException ime) {
                            System.out.println("Invalid input. Try Again");
                            inputInvalid = true;
                        }
                    } while (inputInvalid);

                   System.out.println("Depositing: " + amount);
                   account1.deposit(amount);
                   // balance = amount + balance;
                    break;

                  case 2:
                  // Withdraw money
                      boolean InvalidInput = false;
                      do {
                          System.out.println("How Much would you like to withdraw?");
                          try {
                              // in.useDelimiter("\n");
                              amount = in.nextDouble();
                              InvalidInput = false;
                          } catch (InputMismatchException ime) {
                              System.out.println("Invalid input. Try Again");
                              InvalidInput = true;
                          }
                      } while (InvalidInput);

                      System.out.println("Withdrawing: " + amount);
                      account1.withdraw(amount);
                      // balance = balance - amount;
                      break;
                   case 3:
            // check balance
            System.out.println("Checking Balance.");
            account1.getBalance();
            System.out.println("Available Balance is : " + account1.getBalance());
            break;
       case 0:
            System.out.println("Thanks for Using BankAccount Banking System!");
            quit = true;
            break;
        default:
            System.out.println("Error: Choice not recognized please choose again.");
        continue;
    }
    if (userChoice == 0)
        quit = true;
  } while (!quit);
 }
}
}

样本输出:

Your Choice: 
For Deposit type 1
For Withdraw type 2
For Check Balance type 3
Type 0 to quit
User Input :1
How Much would you like to deposit?
100
Depositing: 100.0
Your Choice: 
For Deposit type 1
For Withdraw type 2
For Check Balance type 3
Type 0 to quit
User Input :25
Error: Choice not recognized please choose again.
Your Choice: 
For Deposit type 1
For Withdraw type 2
For Check Balance type 3
Type 0 to quit
User Input :2
How Much would you like to withdraw?
25
Withdrawing: 25.0
Your Choice: 
For Deposit type 1
For Withdraw type 2
For Check Balance type 3
Type 0 to quit
User Input :3
Checking Balance.
Available Balance is : 75.0
Your Choice: 
For Deposit type 1
For Withdraw type 2
For Check Balance type 3
Type 0 to quit
User Input :0
Thanks for Using BankAccount Banking System!

相关问题