1

これはJavaです。私の問題は、ユーザーが「depositAmount」を入力すると、小数点またはコンマを使用するとプログラムがクラッシュすることです。入力はdouble型である必要があることは理解していますが、「ユーザーの入力が 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();
        }
    }
}

}

4

2 に答える 2

1

next() メソッドを使用して、最初は int 値または double 値を持たない Scanner からの入力を取り込むことができます。データ型がわかっている場合は、次の double (hasNextDouble) または必要なデータ型があるかどうかを確認できます。そうでない場合は、String 型を取り込んで変換できます。

Scanner in = new Scanner(System.in);
String s = in.next();

そこから、適切なデータ型 (double など) に解析できます。

double d = Double.parseDouble(s);

これが役に立ったことを願っています!

于 2014-10-06T22:43:50.413 に答える
0

この目的のために、Java で try/catch セグメントを簡単に使用できます。ユーザーが小数ではなく整数を入力した場合、プログラムはキャスト例外を発生させ、必要に応じて処理できます (ユーザーに再度入力を求めるなど)。

于 2014-10-06T22:46:17.343 に答える