【发布时间】:2016-02-20 18:09:16
【问题描述】:
我一直试图弄清楚我正在编写的这个程序出了什么问题。这是我正在尝试做的事情的完整描述: 使用在编程练习 9.7 中创建的 Account 类来模拟 ATM 机。在 id 为 0, 1, 的数组中创建十个帐户。 . . , 9, 初始余额 100 美元。系统提示用户输入一个id。如果 id 输入错误,请要求用户输入正确的 id。一旦一个 id 被接受,主菜单就会显示,如示例运行中所示。可以输入选项1查看当前余额,2取款,3存款,4退出主菜单。退出后,系统会再次提示输入 id。因此,系统一旦启动,就不会停止。
该程序现在仅在每次购买后显示默认的 100 美元。我意识到问题是每次交易后都会重新创建我的帐户。我的问题基本上是我能做什么或者我在哪里可以重写帐户创建,所以我避免了这个问题。我是编程新手,所以我还在苦苦挣扎。提前致谢。
import java.util.Date;
import java.util.Scanner;
public class test {
public static void main(String[] args) {
mainMenuOptions();
}
//main menu option method
public static void mainMenuOptions(){
Scanner input = new Scanner(System.in);
//enter id
System.out.println("Enter an id: ");
int id = input.nextInt();
//create accounts
Account [] accounts = new Account[10];
//initialize 100 dollars
for (int i = 0; i < accounts.length; i++) {
accounts[i] = new Account(i, 100);
}
int index = -1;
for(int i = 0; i < accounts.length; i++) {
if(accounts[i].getid() == id) {
index = i;
i = accounts.length;
}
}
if(id <= 9){
//main menu
mainMenu();
//user enters choice in main menu
int enterchoice = input.nextInt();
if(enterchoice == 1){
System.out.println("The balance is " + accounts[index].getbalance());
mainMenuOptions();
}
else if(enterchoice == 2){
System.out.println("Enter an amount to withdraw ");
double amount = input.nextDouble();
//withdraw method
accounts[index].withdraw(amount);
mainMenuOptions();
}
else if(enterchoice == 3){
System.out.println("Enter an amount to deposit ");
double amount = input.nextDouble();
//deposit method
accounts[index].deposit(amount);
mainMenuOptions();
}
else if(enterchoice == 4){
mainMenuOptions();
}
}
else{
System.out.println("Please enter a correct id");
mainMenuOptions();
}
}
//main menu method
public static void mainMenu(){
System.out.println("Main menu"+"\n1:check balance"+"\n2:withdraw"
+"\n3:deposit"+"\n4:exit"+"\nEnter a choice");
}
}
class Account{
private int id = 0;
private double balance = 0;
private double withdraw = 0;
private double deposit = 0;
private double amount = 0;
Account(){
}
Account(int id, double balance){
this.id = id;
this.balance = balance;
}
public int getid(){
return this.id;
}
public void setid(int newid){
id = newid;
}
public double getbalance(){
return this.balance;
}
public void withdraw(double amount){
balance = balance - amount;
}
public void deposit(double amount){
balance = balance + amount;
}
}
编辑:当我去检查余额时,它会将我重新循环回扫描仪以获取 ID 和选项。我不确定这里的问题是什么,有人可以尝试运行我的代码或给我一些关于可能是什么问题的见解。谢谢。该程序应该能够通过任何交易选择,模拟 ATM 机,id 是 0-9 之间的数字。这是新的更新代码。
import java.util.Date;
导入 java.util.Scanner;
public class test {
private static Account[] accounts = new Account[10];
public static void main(String[] args) {
accounts();
mainMenuOptions();
}
//main menu option method
public static void mainMenuOptions() {
Scanner input = new Scanner(System.in);
int enterchoice = -1;
int id=-1;
while (enterchoice != 4) {
mainMenu();
System.out.println("Enter an id: ");
id = input.nextInt();
//enter id
System.out.println("Enter choice: ");
enterchoice = input.nextInt();
int index = -1;
for (int i = 0; i < accounts.length; i++) {
if (accounts[i].getid() == id) {
index = i;
break;
}
}
if (enterchoice == 1) {
System.out.println("The balance is " + accounts[index].getbalance());
} else if (enterchoice == 2) {
System.out.println("Enter an amount to withdraw ");
double amount = input.nextDouble();
//withdraw method
accounts[index].withdraw(amount);
} else if (enterchoice == 3) {
System.out.println("Enter an amount to deposit ");
double amount = input.nextDouble();
//deposit method
accounts[index].deposit(amount);
}
}
}
public static void accounts() {
//create accounts
//initialize 100 dollars
for (int i = 0; i < accounts.length; i++) {
accounts[i] = new Account(i, 100);
}
}
//main menu method
public static void mainMenu(){
System.out.println("Main menu"+"\n1:check balance"+"\n2:withdraw"
+"\n3:deposit"+"\n4:exit");
}
}
class Account{
private int id = 0;
private double balance = 0;
private double withdraw = 0;
private double deposit = 0;
private double amount = 0;
Account(){
}
Account(int id, double balance){
this.id = id;
this.balance = balance;
}
public int getid(){
return this.id;
}
public void setid(int newid){
id = newid;
}
public double getbalance(){
return this.balance;
}
public void withdraw(double amount){
balance = balance - amount;
}
public void deposit(double amount){
balance = balance + amount;
}
}
【问题讨论】:
-
您想在您的程序中使用循环进行多笔交易,并且您想保存您的帐户信息以便在您重新启动程序时不会丢失吗?顺便说一句,我建议您在 IDE 中使用格式化程序以使代码更具可读性。
-
是的,该程序有多个 id (0-9) 代表一个帐户。输入 id 1 后,您可以根据需要多次提取/存款或检查我们的余额,直到您点击退出命令。这一切都很好,只是余额将始终保持在起始 100 美元,因为我目前每次都在 mainMenuOptions 中重新创建这些帐户。我知道这是问题所在,我只需要关于将其移至何处或如何防止它不断重新创建 10 个帐户的帮助。