This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center




7年前关闭。





我在返回主菜单时遇到问题。存入银行后,我想再次向用户显示主菜单,但我不知道这里出了什么问题。查明我的确切问题。在银行存款后,当我输入“ Y”并单击“确定”按钮时,主菜单应该再次出现,但没有出现。

这是我的程序。

基类:

import java.io.*;
import java.util.*;
public class BankAccount
{

    public BankAccount(double b, String n)
    {
       double balance = b;
       String name = n;
    }

    public void deposit(double d)
    {
        balance += d;
    }

    public void withdraw(double w)
    {
        balance -= w;
    }

    public String nickname()
    {
        System.out.print("Enter a new name: ");
        Scanner kbIn = new Scanner(System.in);
        String n = kbIn.nextLine();
        return n;
    }

    double balance;
    String name;

}


测试类别:

import java.awt.Component;
import java.io.*;
import javax.swing.JOptionPane;
import java.util.*;

public class Tester {
    private static String name;
    private static double bal;
    private static double withdraw;

    public static void main(String args[]) {
        Scanner kbInLine = new Scanner(System. in );
        Scanner kbIn = new Scanner(System. in );


        name = JOptionPane.showInputDialog(null, "Enter your name: ");

        String num;
        int pin;
        num = JOptionPane.showInputDialog("Enter your pin number: ");
        pin = Integer.parseInt(num);

        JOptionPane.showMessageDialog(null, "Login Success\n" + "Name : " + name + "\n" + "Pin Number : " + pin);



        BankAccount myAccount = new BankAccount(withdraw, name);


        String[] buttons = {
            "Deposit", "Withdraw", "Print Balance", "Exit"
        };
        int rc = JOptionPane.showOptionDialog(null,
            "What would you like to do?",
            "Confirmation",
        JOptionPane.INFORMATION_MESSAGE,
        0,
        null,
        buttons,
        buttons[2]);


        if (rc == 0) {
            int deposit;
            String dep = JOptionPane.showInputDialog("How much would you like to deposit?\n\t$ ");
            deposit = Integer.parseInt(num);
            JOptionPane.showMessageDialog(null, "You have deposited $" + dep + " into the account of " + name);

            String proceeds = "y";
            while (proceeds.equalsIgnoreCase("y"))
            do {
                proceeds = JOptionPane.showInputDialog(null, "\nWould you like to do another transaction? (Y/N)");
            } while (proceeds.equalsIgnoreCase("Y"));

            System.exit(0);
        }


        if (rc == 1) {
            double withdraw;
            String with = JOptionPane.showInputDialog("How much would you like to withdraw?\n\t$");
            withdraw = Integer.parseInt(num);
            if (bal - withdraw > 0) {
                myAccount.withdraw(withdraw);
                JOptionPane.showMessageDialog(null, "You have withdrawn $" + withdraw + " from the account of " + name + ". The new balance is: " + myAccount.balance);
            } else {
                JOptionPane.showMessageDialog(null, "Sorry, you have insufficient funds for this operation. Your existing balance is $" + myAccount.balance);
            }

            String proceeds = "y";
            while (proceeds.equalsIgnoreCase("y"))
            do {
                proceeds = JOptionPane.showInputDialog(null, "\nWould you like to do another transaction? (Y/N)");
            } while (proceeds.equalsIgnoreCase("Y"));

            System.exit(0);
        }

        if (rc == 2) {
            JOptionPane.showMessageDialog(null, "The balance in the account of " + name + " with the pin number " + num + " is $" + bal);



            String proceeds = "y";
            while (proceeds.equalsIgnoreCase("y"))
            do {
                proceeds = JOptionPane.showInputDialog(null, "\nWould you like to do another transaction? (Y/N)");
            } while (proceeds.equalsIgnoreCase("Y"));

            System.exit(0);
        }


        if (rc == -1) {
            System.exit(0);
        } else {

            JOptionPane.showMessageDialog(null, "\nThank you. Have a good day!");
            System.exit(0);
        }


    }
}

最佳答案

我会尝试重新整理您的课程,以便使其更加清晰。我还做了一些小的更改以提高性能。但是我准备接受所有建议或批评。

银行账户类

public class BankAccount {

    private double balance;

    private String name;

    public BankAccount(double b, String n) {
        this.balance = b;
        this.name = n;
    }

    public void deposit(double d) {
        balance += d;
    }

    public void withdraw(double w) {
        balance -= w;
    }

    public String nickname() {
        System.out.print("Enter a new name: ");
        Scanner kbIn = new Scanner(System.in);
        String n = kbIn.nextLine();
        return n;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}


测试员班

    import java.awt.HeadlessException;
    import java.util.Scanner;

    import javax.swing.JOptionPane;

    public class Tester {

        private static String name;

    private static double withdraw;

    private static int pin;

    public static void main(String args[]) {
        Scanner kbInLine = new Scanner(System.in);
        Scanner kbIn = new Scanner(System.in);

        name = JOptionPane.showInputDialog(null, "Enter your name: ");

        String num = JOptionPane.showInputDialog("Enter your pin number: ");
        pin = Integer.parseInt(num);

        JOptionPane.showMessageDialog(null, "Login Success\n" + "Name : " + name + "\n" + "Pin Number : " + pin);

        BankAccount myAccount = new BankAccount(withdraw, name);

        int rc = getRC();
        processor(myAccount, rc);
    }

    private static int getRC() throws HeadlessException {
        String[] buttons = { "Deposit", "Withdraw", "Print Balance", "Exit" };
        int rc = JOptionPane.showOptionDialog(
            null,
            "What would you like to do?",
            "Confirmation",
            JOptionPane.INFORMATION_MESSAGE,
            0,
            null,
            buttons,
            buttons[2]);
        return rc;
    }

    private static void processor(BankAccount myAccount, int rc) throws HeadlessException, NumberFormatException {
        switch(rc) {
            case 0:
                processDeposit(myAccount, rc);
                break;
            case 1:
                processWithdraw(myAccount, rc);
                break;
            case 2:
                processBalance(myAccount, rc);
            default:
                processExit(rc);
                break;
        }
    }

    private static void processExit(int rc) throws HeadlessException {
        if(rc == -1) {
            JOptionPane.showMessageDialog(null, "\nThank you. Have a good day!");
            System.exit(0);
        }
    }

    private static void processDeposit(BankAccount myAccount, int rc) throws HeadlessException, NumberFormatException {
        double deposit;
        String dep = JOptionPane.showInputDialog("How much would you like to deposit?\n\t$ ");
        deposit = Double.parseDouble(dep);
        myAccount.deposit(deposit);

        JOptionPane.showMessageDialog(null, "You have deposited $" + dep + " into the account of " + name);
        processManager(myAccount);
    }

    private static void processWithdraw(BankAccount myAccount, int rc) throws HeadlessException, NumberFormatException {
        double withdraw;
        String with = JOptionPane.showInputDialog("How much would you like to withdraw?\n\t$");
        withdraw = Double.parseDouble(with);
        if(myAccount.getBalance() - withdraw >= 0) {
            myAccount.withdraw(withdraw);
            JOptionPane.showMessageDialog(null, "You have withdrawn $" + withdraw + " from the account of " + name
                    + ". The new balance is: " + myAccount.getBalance());
        } else {
            JOptionPane.showMessageDialog(
                null,
                "Sorry, you have insufficient funds for this operation. Your existing balance is $"
                        + myAccount.getBalance());
        }
        processManager(myAccount);
    }

    private static void processBalance(BankAccount myAccount, int rc) throws HeadlessException {
        JOptionPane.showMessageDialog(null, "The balance in the account of " + name + " with the pin number " + pin
                + " is $" + myAccount.getBalance());
        processManager(myAccount);
    }

    private static void processManager(BankAccount myAccount) throws HeadlessException, NumberFormatException {
        int rc;
        String proceeds = JOptionPane.showInputDialog(null, "\nWould you like to do another transaction? (Y/N)");
        if(proceeds.equalsIgnoreCase("y")) {
            rc = getRC();
            processor(myAccount, rc);
        } else {
            processExit(-1);
        }
    }
}


您的错误是,您的结构不好,并且绝对不需要在withdraw方法中进行操作。

在我的帖子中:在processWithdraw()方法中,我调用表示主菜单的getRc()方法,并返回所选按钮的值。最后,我将返回值传递给processor()

09-30 17:53