[英]How can I error handle my code to prevent my program from crashing when the user inputs a decimal point?
這是在Java中,我的問題是,當用戶輸入“ depositAmount”時,如果他們使用小數點或逗號,則程序會崩潰,我知道他們的輸入必須是double類型,但我不知道怎么說“如果用戶輸入的是雙精度,則接受它,否則,要求新的輸入”
import java.util.Scanner;
import java.util.ArrayList;
public class Engine
{
private static ArrayList<BankAccount> accounts = new ArrayList<BankAccount>();
public static void Engine()
{
Scanner Reader = new Scanner(System.in);
BankAccount n = new BankAccount();
boolean keepGoing = true;
while(keepGoing)
{
System.out.println("Welcome to The Bank of Money, what would you like to do?\n enter n to create a new account, enter e to use an existing account, or enter q to quit to main menu");
String response = Reader.nextLine();
if(response.equals("q")) keepGoing = false;
else if(response.equals("n"))
{
accounts.add(new BankAccount());
System.out.println("Your account number is: " + accounts.get(accounts.size()-1).getAccountNum());
}
else if(response.equals("e"))
{
System.out.println("what is your account number?");
Scanner Reader1 = new Scanner (System.in);
int accountNum = Reader1.nextInt();
BankAccount selectedAccount = null;
for(int i = 0; i<accounts.size();i++)
{
if (accounts.get(i).getAccountNum()==accountNum)
{
selectedAccount = accounts.get(i);
}
}
if(selectedAccount ==null)System.out.println("There is no such account. Please try again.");
else transact(selectedAccount);
}
}
}
public static void transact(BankAccount selectedAccount)
{
Scanner in = new Scanner(System.in);
int response = 0;
while(response!=7)
{
BankAccount.printTransactionMenu();
response = in.nextInt();
if(response==1)
{
System.out.println("Enter the amount that you would like to deposit");
System.out.print("$");
Scanner depositScanner = new Scanner(System.in);
double depositAmount = depositScanner.nextInt();
}
if(response==2)
{
System.out.println("Enter the amount that you would like to withdraw");
System.out.print("$");
Scanner withdrawScanner = new Scanner(System.in);
double withdrawAmount = withdrawScanner.nextInt();
if(withdrawAmount>selectedAccount.getBalance())
System.out.println("Insufficient funds");
else selectedAccount.withdraw(withdrawAmount);
}
if(response==3)
{
selectedAccount.assessInterest();
System.out.println("Your new balance is $" + selectedAccount.getBalance());
}
if(response==4)
{
System.out.println("Your account balance is $" + selectedAccount.getBalance());
}
if(response==5)
{
System.out.println("Which account would you like to transact with?");
Scanner Reader1 = new Scanner (System.in);
int transactAccountNum = Reader1.nextInt();
BankAccount transactAccount = null;
for(int i = 0; i<accounts.size();i++)
{
if (accounts.get(i).getAccountNum()==transactAccountNum)
{
transactAccount = accounts.get(i);
}
}
if(transactAccount ==null)System.out.println("There is no such account. Please try again.");
else
{
System.out.println("What amount would you like to transfer?");
Scanner transferScanner = new Scanner(System.in);
double transactAmount = transferScanner.nextDouble();
selectedAccount.transfer(transactAccount, transactAmount);
}
}
if(response==6)
{
selectedAccount.printStatement();
}
}
}
}
您可以使用next()方法從Scanner接收最初沒有int或double值的輸入。 如果知道數據類型,則可以檢查它是否具有下一個雙精度型(hasNextDouble)或所需的任何數據類型。 如果不是,則可以接受String類型並將其轉換。
Scanner in = new Scanner(System.in);
String s = in.next();
從那里,您可以將其解析為適當的數據類型(例如double)。
double d = Double.parseDouble(s);
希望對您有所幫助!
為此,您可以輕松地在Java中使用try / catch段。 如果用戶輸入的是整數而不是十進制,則程序將引發強制轉換異常,然后您可以根據需要進行處理(例如要求用戶再次輸入)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.