0

ATMプログラムを作りました。ユーザーにPIN番号の入力を求めるtrycatchがあります。ピン番号は5桁である必要があります。したがって、例外は5桁かどうかをチェックしますが、例外処理は機能していません。入力した番号に関係なく、常に無効な番号と表示されます。

これが私のコードです。trycatchはプログラムの上部にあり、例外処理checkNumberはプログラムの下部にあります。

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 (String.valueOf(input).length() != 5)
        {
            throw new invalidNumber("invalid number");
        }
        else
        {

            System.out.println("Works!");
        }

    }

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

3 に答える 3

1

このコードスニペットは問題ないように見えます。

    if (String.valueOf(input).length() != 5)
    {
        throw new invalidNumber("invalid number");
    }
    else
    {

        System.out.println("Works!");
    }

あなたがそれがどこかでローカルに宣言された変数でinputないことに気づかない限り:double

double input = keyboard.nextInt()

代わりに、それはjava.util.Scanner(!)のインスタンスです

static Scanner input = new Scanner(System.in)

そしてScanner.toString()確かにあなたが望むPINではありません。

于 2012-09-25T19:14:04.920 に答える
0

Scannerクラスの3つの異なるインスタンスがある理由..それがプログラムを混乱させるものです..

このメソッドでは、ScannerのインスタンスであるcompareNumber()の値を実際にチェックしています。次のように使用することをお勧めします。-input

checkNumber(input.nextInt())

checkNumber(int num)そして、メソッドのリストに番号を追加します。

もちろん、それがコーディングの良い方法だと言っているわけではありません。しかし、それは当分の間あなたの問題を解決するでしょう。

そうでなければ、あなたのコードには非常に多くの問題があります。

これはあなたのtry-catchブロックです:-

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

そしてこれがあなたのcheckNumber()方法です:-

private static void checkNumber() throws invalidNumber 
{
    if (String.valueOf(input).length() != 5) {
        throw new invalidNumber("invalid number");
    }
    else {
        System.out.println("Works!");
    }
}

inputここで、をパラメータとして使用していることを確認する必要がありますString.valueOf(input)

ただし、try-catchブロックの前にScannerのインスタンスとして'input`を宣言しました。

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

このコードはあなたのcodeNumbers()メソッドにあります。

したがって、明らかに、オブジェクトを表すのinputではなく、実際にユーザー入力を含めることはできません。hashcodenew Scanner(System.in)

したがって、ユーザーからcheckNumber()メソッドに整数入力を渡す方がよいでしょう。

** * ** * ** ****コードに必要な変更

したがって、checkNumber()`は次のように変更されます。

    private static void checkNumber(int number) throws invalidNumber 
    {
        if (String.valueOf(number).length() != 5) {
            throw new invalidNumber("invalid number");
        }
        else {
            System.out.println("Works!");
        }
    }

そして、try-catchブロックでのこのメソッドの呼び出しは、次のように変更されます。

        try {
            System.out.println("Please select a 5 digit card number");
            int number = input.nextInt();
            cardNum.add(number);
            checkNumber(number);
        } catch (invalidNumber err) {
            System.out.println("Caught Error: " + err.getError());
        }
于 2012-09-25T19:18:00.653 に答える
0

コードString.valueOf(input)は5文字の長さをチェックします。ただしinput、ユーザーが入力した番号ではありません。Scannerこれは、ユーザーが入力した内容を解析するために使用されるタイプのオブジェクトです。したがって、の結果String.valueOf(input)はおそらくのようなものになりjava.util.Scanner@B09876ます。

于 2012-09-25T19:15:29.750 に答える