gpt4 book ai didi

java - 如何返回主菜单?

转载 作者:行者123 更新时间:2023-12-01 14:51:26 28 4
gpt4 key购买 nike

我在如何返回主菜单时遇到问题。在银行存款后,我想再次向用户显示主菜单,但我不知道这里有什么问题。为了查明我的确切问题。在银行存款后,当我输入“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);
}


}
}

最佳答案

我尝试重新组织你的类(class),使其更加清晰。我还做了一些小的改变来提高性能。不过,我准备接受所有建议或批评。

BankAccount 类

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

关于java - 如何返回主菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14797066/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com