Java 程序无法正确添加金额



所以我对java还是相当陌生的。我已经写了这篇文章,但不确定为什么当我运行它时,金额不会添加到客户端中设置的金额中。

例如:我输入500作为起始余额,如果我点击存款,然后键入500,然后点击案例3,它应该是1000,但它仍然是500。然后如果我点击退出,它会说我有-500。

有什么想法吗?感谢

package bankaccount;
import java.util.Random;
import java.util.Scanner;
public class Client {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);       
System.out.println("Enter your Name: ");
String cusName = input.nextLine();
Random randomGenerator = new Random();
int accNo = randomGenerator.nextInt(100000);
System.out.println("Enter Initial Balance: ");
int balance = input.nextInt();
BankAccount b1 = new BankAccount(cusName, accNo, balance);
int menu;
System.out.println("Menu");
System.out.println("1. Deposit Amount");
System.out.println("2. Withdraw Amount");
System.out.println("3. Display Information");
System.out.println("4. Exit");
boolean quit = false;
do {
System.out.print("Please enter your choice: ");
menu = input.nextInt();
switch (menu) {
case 1:            
System.out.print("Enter depost amount:");
Money.amount = input.nextInt(); 
b1.getDeposit(); 
break;
case 2:
System.out.println("Current Account Balance=" + b1.getBalance());
System.out.print("Enter withdrawal amount:");
Money.amount = input.nextInt();
b1.getWithdraw();
break;
case 3:
b1.display();
break;
case 4:
quit = true;
break;
}
} while (!quit);
}

public class Money
{
public static int accountNumber, balance=0;
static int amount;
static String name;
public void setDeposit(int amount) {   
balance = balance + amount;   
}
public int getDeposit()
{
balance = balance + amount;
if (amount < 0) {
System.out.println("Invalid");
}
return 1; 
}
public void setBalance(int b)
{
b = balance;
}
public int getBalance()
{
return balance;
}
public void setWithdraw(int amount)  {

balance = balance - amount;
}
public int getWithdraw()
{
balance = balance - amount;
if (balance < amount) 
{
System.out.println("Not enough funds.");
return 1;
}
else if (amount < 0) {
System.out.println("Invalid");
return 1;}
else 
return 0;
}

import java.util.*;
public class BankAccount extends Money {
static String name;
public static int balance, amount, acctNum;
Money customerMoney;

BankAccount(String name, int accNo, int bal) {
this.name = name;
this.acctNum = accNo;
this.balance = bal;
this.customerMoney = new Money();
}
void display() {
System.out.println("Name:" + name);
System.out.println("Account No:" + acctNum);
System.out.println("Balance:" + balance);
}
void displayBalance() {
System.out.println("Balance:" + balance);
}
public Money getMoney(){
return this.customerMoney;
}
}

最大的问题是语句balance=0

public static int accountNumber, balance=0;
^^^^^^^^^

每次您要插入金额时,您的余额都是ZERO

您应该使用setDeposit(input.nextInt())

public void setBalance(int b)中,b = balance;应该是balance = b;

此外,您的amountbalance变量应该是Float而不是int,因为balance/amount可以是23434.22

我将删除您正在使用的所有public static int变量。这些会引起混乱,因为在程序执行时很难了解它们的值。最好使用私有变量和公共方法将您的逻辑封装到BankAccount中进行修改。

就我个人而言,我会从您的代码中删除Money类。这只会引起混乱,而且不需要简化逻辑。让我们假设这个账户持有一些任意数量的"钱",但实际上没有现实生活中的钱来支持它——(有点像现实生活,它只是"屏幕上的数字",对吧?)——在这种情况下,我们不需要Money类,只需要BankAccountbalanceint

在不尝试对底层功能进行太多更改的情况下,我将其重写为以下两个类:

BankAccount类:

package banking;
public class BankAccount {
/**
* The balance of this account. <br/>
* Assumes integer money (Floating point math is horrible and who really
* needs pesky pence or cents right?!)
*/
private int balance;
/**
* The account number
*/
private final int acctNum;
/**
* Name of the account holder
*/
private final String name;
/**
* Construct our basic account with an account number, account holder and
* starting balance.
*
* @param name
* @param accNo
* @param bal
*/
public BankAccount(String name, int accNo, int bal) {
this.name = name;
this.acctNum = accNo;
this.balance = bal;
}
/**
* Make a deposit to this account by adding a fixed sum to the existing
* balance. <br/>
*
* @param amount
*/
public void deposit(int amount) {
if (amount <= 0) {
throw new IllegalArgumentException("You cannot deposit zero or less");
} else {
this.balance += amount;
}
}
/**
* Make a withdrawal from this account by subtracting a fixed amount from
* the existing balance. <br/>
*
* @param amount
*/
public void withdraw(int amount) {
if (amount > balance) {
throw new IllegalArgumentException("Insufficient Funds");
} else if (amount <= 0) {
throw new IllegalArgumentException("You cannot withdraw zero or less");
} else {
balance -= amount;
}
}
/**
* Get the account holder name.
*
* @return
*/
public String getName() {
return name;
}
/**
* Get the current account balance.
*
* @return
*/
public int getBalance() {
return balance;
}
/**
* Get the account identifier for this account.
*
* @return
*/
public int getAcctNum() {
return acctNum;
}
/**
* Debug print method.
*/
public void display() {
System.out.println("Name:" + name);
System.out.println("Account No:" + acctNum);
System.out.println("Balance:" + balance);
}
}

主要类别:

package banking;
import java.util.Random;
import java.util.Scanner;
public class BankMain {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
System.out.println("Enter your Name: ");
String customerName = input.nextLine();
Random randomGenerator = new Random();
int acctNo = randomGenerator.nextInt(100000);
System.out.println("Enter Initial Balance: ");
int balance = input.nextInt();
BankAccount acct = new BankAccount(customerName, acctNo, balance);
System.out.println("Menu");
System.out.println("1. Deposit Amount");
System.out.println("2. Withdraw Amount");
System.out.println("3. Display Information");
System.out.println("4. Exit");
boolean quit = false;
int menu;
do {
final int transaction;
System.out.print("Please enter your choice: ");
menu = input.nextInt();
switch (menu) {
case 1:
System.out.print("Enter depost amount:");
transaction = input.nextInt();
acct.deposit(transaction);
break;
case 2:
System.out.println("Current Account Balance=" + acct.getBalance());
System.out.print("Enter withdrawal amount:");
transaction = input.nextInt();
try {
acct.withdraw(transaction);
} catch (IllegalArgumentException iaEx) {
System.out.println(iaEx.getMessage());
}
break;
case 3:
acct.display();
break;
case 4:
quit = true;
break;
}
} while (!quit);
}
}

这还远远不够完美,但我觉得删除静态变量和Money类更容易实现。

您的代码有很多问题,例如,您的字段不应该是静态的,但主要的问题是您有多个重复的字段。

例如,在Money中,您有

public static int accountNumber, balance=0;
static int amount;
static String name;

在BankAccount中您有

static String name;
public static int balance, amount, acctNum;
Money customerMoney;

这意味着您有多个名为namebalanceamount的字段。有些代码使用第一组字段,有些代码使用第二组字段。您还有一个customerMoney,它不会直接更新。

为了避免混淆,我建议每个字段都是非静态的,并且只在一个地方。删除customerMoney,因为您可能会想使用它;)

最新更新