1

私は小さなATMプログラムを持っていて、それに例外処理を使用しています。プログラムの開始時に、プログラムの下部にある例外処理に送信するトライキャッチがあります。

ユーザーは5桁の数字を入力することになっています...例:12345。次に、数字をチェックし、ユーザーの数字が5未満かどうかをチェックしてからエラーを送信しますが、私がしたいのは、長さが5より大きい<または>の場合、エラーを送信します。これは私のプログラムの今の私のコードです...

import java.util.ArrayList;
import java.util.Scanner;

    public class BankMain
    {
    private double availableBal =80;
    private double totalBal =100;
    private double availableBal2 =480;
    private double totalBal2 =500;
    private double availableBal3 =80;
    private double totalBal3 =100;
    ArrayList<Integer> cardNum = new ArrayList<Integer>();
    static Scanner input = new Scanner(System.in);


    private String error;           //String the error from the exception
    {
        error = "error";
    }


    public void cardNumbers(){


            Scanner cards = new Scanner(System.in);
            Scanner input = new Scanner(System.in);
            Scanner keyboard = new Scanner(System.in);





            try{


            System.out.println("Please select a 5 digit card number");

            cardNum.add(input.nextInt());
            checkNumber();


            }

            catch(invalidNumber err){

                System.out.println("Caught Error: " + err.getError());
            }

            System.out.println("Thank you! You're card number is " +cardNum);

            System.out.println("Type 'c' to go back to main menu.");
            String value = keyboard.next();

            if(value.equalsIgnoreCase("c")){
                menu();

    }

    else if (!keyboard.equals('c')){

        System.out.println("Invalid Entry!");

    }

}


    public void menu(){

    System.out.println("ATM Menu:");
    System.out.println();
    System.out.println("1 = Create Account");
    System.out.println("2 = Account Login");
    System.out.println("3 = Exit ATM");
    query();
                }

        public void startAtm()
        {
            menu();

        }



        public void drawMainMenu()
        {

            AccountMain main3 = new AccountMain();
            int selection;

            System.out.println("\nATM main menu:");
            System.out.println("1 - View account balance");
            System.out.println("2 - Withdraw funds");
            System.out.println("3 - Add funds");
            System.out.println("4 - Back to Account Menu");
            System.out.println("5 - Terminate transaction");
            System.out.print("Choice: ");
            selection =input.nextInt();

            switch(selection)
            {
            case 1:
                viewAccountInfo();
                break;
            case 2:
                withdraw();
                break;
            case 3:
                addFunds();
                break;
            case 4:
                AccountMain.selectAccount();
                break;
            case 5:
                System.out.println("Thank you for using this ATM!!! goodbye");
            }
        }

        public void viewAccountInfo()
        {
            System.out.println("Account Information:");
            System.out.println("\t--Total balance: $"+totalBal);
            System.out.println("\t--Available balance: $"+availableBal);
            drawMainMenu();
        }

        public void viewAccountInfo2()
        {
            System.out.println("Account Information:");
            System.out.println("\t--Total balance: $"+totalBal2);
            System.out.println("\t--Available balance: $"+availableBal2);
            drawMainMenu();
        }

        public void deposit(int depAmount)
        {
            System.out.println("\n***Please insert your money now...***");
            totalBal =totalBal +depAmount;
            availableBal =availableBal +depAmount;
        }

        public void checkNsf(int withdrawAmount)
        {
            if(totalBal -withdrawAmount < 0)
                System.out.println("\n***ERROR!!! Insufficient funds in you accout***");
            else
            {
                totalBal =totalBal -withdrawAmount;
                availableBal =availableBal -withdrawAmount;
                System.out.println("\n***Please take your money now...***");
                }
        }

        public void addFunds()
        {
            int addSelection;

            System.out.println("Deposit funds:");
            System.out.println("1 - $20");
            System.out.println("2 - $40");
            System.out.println("3 - $60");
            System.out.println("4 - $100");
            System.out.println("5 - Back to main menu");
            System.out.print("Choice: ");
            addSelection =input.nextInt();

            switch(addSelection)
            {
            case 1:
                deposit(20);
                drawMainMenu();
                break;
            case 2:
                deposit(40);
                drawMainMenu();
                break;
            case 3:
                deposit(60);
                drawMainMenu();
                break;
            case 4:
                deposit(100);
                drawMainMenu();
                break;
            case 5:
                drawMainMenu();
                break;
            }
        }

        public void withdraw()
        {
            int withdrawSelection;

            System.out.println("Withdraw money:");
            System.out.println("1 - $20");
            System.out.println("2 - $40");
            System.out.println("3 - $60");
            System.out.println("4 - $100");
            System.out.println("5 - Back to main menu");
            System.out.print("Choice: ");
            withdrawSelection =input.nextInt();

            switch(withdrawSelection)
            {
            case 1:
                checkNsf(20);
                drawMainMenu();
                break;
            case 2:
                checkNsf(40);
                drawMainMenu();
                break;
            case 3:
                checkNsf(60);
                drawMainMenu();
                break;
            case 4:
                checkNsf(100);
                drawMainMenu();
                break;
            case 5:
                drawMainMenu();
                break;
            }
        }

public void query(){

    Scanner keyboard = new Scanner(System.in);
    double input = keyboard.nextInt();  


    if (input == 2){

        BankMainPart2 main2 = new BankMainPart2();

        System.out.println("Please enter your 5 digit card number.");
         BankMainPart2.loginCard(cardNum);



    }
    else if (input == 1){

        cardNumbers();

    }

    else if (input == 3){
        System.out.println("Thank you, have a nice day!");
        System.exit(0);


    }

}

public void checkingMenu()
{

    AccountMain main3 = new AccountMain();
    int selection;

    System.out.println("\nATM main menu:");
    System.out.println("1 - View account balance");
    System.out.println("2 - Withdraw funds");
    System.out.println("3 - Add funds");
    System.out.println("4 - Back to Account Menu");
    System.out.println("5 - Terminate transaction");
    System.out.print("Choice: ");
    selection =input.nextInt();

    switch(selection)
    {
    case 1:
        viewAccountInfo2();
        break;
    case 2:
        withdraw();
        break;
    case 3:
        addFunds();
        break;
    case 4:
        AccountMain.selectAccount();
        break;
    case 5:
        System.out.println("Thank you for using this ATM!!! goodbye");
    }
}

private static void checkNumber() throws invalidNumber              //run the check activation exception
{
    if(input.nextInt() == 5)
  {
        System.out.println("Works!");
  }
    else{

     throw new invalidNumber("invalid number");
 }  
}

    public static void main(String args[])
    {
        BankMain myAtm = new BankMain();
        myAtm.startAtm();
    }
}
4

4 に答える 4

1

数値を文字列に変換してから、を使用length()して桁数を確認します

于 2012-09-24T05:08:47.317 に答える
1
        System.out.println("Please select a 5 digit card number");

        String s=input.next();

        //Here check the nu. digits by using length()

        cardNum.add(s);

        checkNumber();
于 2012-09-24T05:20:04.567 に答える
1

そのままでは、プログラムはハングするはずです (質問でこれを指定していないため、私の仮定が間違っている可能性があります)。2 回呼び出しているinput.nextInt()ため、プログラムはユーザーから 2 セットの数字を受け取る必要があります。

これを回避するには、nextLine()メソッドを使用して、最初にユーザーの入力を文字列として読み取ることをお勧めします。次に、次のようにします。

String userInput = input.nextLine().trim();
checkNumber(userInput);
cardNum.add(Integer.parseInt(userInput);

また、checkNumber行全体を読み取っているため、そのままでは失敗するため、次の変更を行う必要があります。

  • 文字を反復処理し、 を使用してisDigit、各文字が数字であることを確認する必要があります OR

  • このような正規表現を^\\d{5}$使用して、文字列が完全に 5 つの数字で構成されていることを確認します。正規表現については、このチュートリアルを見て正しい軌道に乗ることができます。初心者の場合、これは少し圧倒されるように思えるかもしれませんが、通常、文字列のデータ検証には正規表現を使用することをお勧めします。

于 2012-09-24T05:13:36.550 に答える
0

コード全体を取得し、長さが == 5 かどうかを確認する必要があります。次を使用して入力を文字列に変換する必要があります。

String.valueOf(int i)

また

Integer.toString(int i)

または、次を使用して文字列として読み取るだけです。

string givenCode = yourScan.next();

次に長さを確認します。

if (givenCode.length() == 5)
于 2012-09-24T05:13:15.270 に答える