我正在做一个atm程序,我很难弄清楚如何让它实际存入和取出。余额自动以$ 0开始,但是我输入的任何内容都无法实际添加或减去它我做错了什么?
public class ATM {
static Scanner keyboard = new Scanner(System.in);
static String acctNum, pwd, result;
static double oldBalance, newBalance, deposit, withdraw;
static int choose;
public static void main(String[] args) {
for (int run = 0; run < 3; run++) {
System.out.println("Enter your account number");
acctNum = keyboard.nextLine();
System.out.println("Enter your account password");
pwd = keyboard.nextLine();
result = checkID(acctNum, pwd);
if (!result.equals("ERROR")) {
break;
} else if (run == 2) {// you cannot try to log in anymore than 3
// times
System.out.println("MAXIMUM TRIES EXCEEDED");
return;
}
}
menu();
}
public static String checkID(String acctNum, Object pwd) {
String result = "ERROR";
String a = "44567-5 mypassword 520.36";
String b = "1234567-6 anotherpassword 48.20";
String c = "4321-0 betterpassword 96.74";
if (acctNum.equals("44567-5") && pwd.equals("mypassword")) {
result = "520.36";
} else if (acctNum.equals("1234567-6") && pwd.equals("anotherpassword")) {
result = "48.20";
} else if (acctNum.equals("4321-0") && pwd.equals("betterpassword")) {
result = "96.74";
}
System.out.println(result);
return result;
}
public static int menu() {
System.out
.println("Choose one of the following: \n1.Display Balance\n2.Deposit\n3.Withdraw\n4.Log Out");
choose = keyboard.nextInt();
if (choose == 1) {// 1. Display Balance
displayBalance();
menu();
return 1;
}
if (choose == 2) {// 2. Deposit
deposit();
menu();
return 2;
}
if (choose == 3) {// 3. Withdraw
withdraw();
menu();
return 3;
}
if (choose == 4) {// 4. Log out
System.out.println("You are logged out.");
return 4;
}
if (choose <= 5) {// type in anything greater than 4 and you will get a
// system error
System.out.println("System Error");
menu();
return 5;
}
if (choose >= 1) {// type in anything less than 1 and you will get a
// system error
System.out.println("System Error");
menu();
return 6;
}
return choose;
}
public static double deposit() {
System.out.println("How much would you like to deposit?");
deposit = keyboard.nextInt();
System.out.println((deposit + oldBalance)==newBalance);// deposit money into balance
return 2;
}
public static double displayBalance() {
System.out.println("Total balance is: $" + oldBalance);
oldBalance = 0.00;
return 1;
}
public static double withdraw() {
System.out.println("How much would you like to withdraw?");
withdraw = keyboard.nextInt();
System.out.println(newBalance + withdraw);// withdraw money from balance
return 3;
}
}
答案 0 :(得分:1)
一些观察结果:
您的班级不应将oldBalance,deposit和withdraw声明为全局变量。提款方法不应该访问存款变量,反之亦然。尽可能多地限制变量的范围是一种很好的编程习惯。因为&#34;存款&#34;在这个方法之外并不需要变量,绝对没有理由使它成为一个全局变量。关于&#34;目前的平衡,不能说同样的话。&#34;这个类的所有方法都需要这个变量:deposit,withdraw,displayBalance等。因此,有一个很好的理由让它成为全局的(但是,如果你能用较少的范围解决问题,你应该这样做)。
我不明白为什么deposit()
和withdrawal()
需要返回任何内容。
deposit()
和withdrawal()
的最简单实现是将用户输入添加到currentBalance
并将其保存在currentBalance
中。
public void deposit()
{
Scanner input = new Scanner(System.in);
System.out.printn("Enter deposit amount: );
double amount = input.nextDouble();
System.out.println("Your deposit amount: " + amount);
currentBalance += amount;
System.out.println("Your new balance is: + currentBalance);
}
public void withdrawal()
{
Scanner input = new Scanner(System.in);
System.out.printn("Enter withdrawal amount: );
double amount = input.nextDouble();
System.out.println("Your withdrawal amount: " + amount);
currentBalance -= amount;
System.out.println("Your new balance is: + currentBalance);
}
您永远不会保存当前余额。 ==运算符是比较运算符,而不是赋值运算符。当你做这样的事情时:
System.out.println((deposit + oldBalance)==newBalance);
或者像这样:
System.out.println(newBalance + withdraw);
您所做的就是将值传递给println()
方法,而不是更新应该保留余额的变量。实际上,第一个应该打印false
(除非存款和oldBalance都为零)。如果您查看我的代码示例,currentBalance += amount;
是currentBalance = currentBalance + amount;
的简写,这意味着&#34;将此amount
添加到currentBalance
并将其存储在currentBalance
中。因为我正在重用currentBalance,所以我不再需要oldBalance
变量。
答案 1 :(得分:0)
完整运行代码
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowAdapter;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import java.util.ArrayList;
import java.util.Scanner;
/**
A simulation of an automatic teller machine
*/
public class ATM {
static Scanner keyboard = new Scanner(System.in);
static String acctNum, pwd, result;
static double oldBalance, newBalance, deposit, withdraw,currentBalance;
static int choose;
public static void main(String[] args) {
for (int run = 0; run < 3; run++) {
System.out.println("Enter your account number");
acctNum = keyboard.nextLine();
System.out.println("Enter your account password");
pwd = keyboard.nextLine();
result = checkID(acctNum, pwd);
if (!result.equals("ERROR")) {
break;
} else if (run == 2) {// you cannot try to log in anymore than 3
// times
System.out.println("MAXIMUM TRIES EXCEEDED");
return;
}
}
menu();
}
public static String checkID(String acctNum, Object pwd) {
String result = "ERROR";
String a = "44567-5 mypassword 520.36";
String b = "1234567-6 anotherpassword 48.20";
String c = "4321-0 betterpassword 96.74";
if (acctNum.equals("2345") && pwd.equals("2345")) {
result = "520.36";
} else if (acctNum.equals("1234567-6") && pwd.equals("anotherpassword")) {
result = "48.20";
} else if (acctNum.equals("4321-0") && pwd.equals("betterpassword")) {
result = "96.74";
}
System.out.println(result);
return result;
}
public static int menu() {
System.out.println("Choose one of the following: \n1.Display Balance\n2.Deposit\n3.Withdraw\n4.Log Out");
choose = keyboard.nextInt();
if (choose == 1) {// 1. Display Balance
displayBalance();
menu();
return 1;
}
if (choose == 2) {// 2. Deposit
deposit();
menu();
return 2;
}
if (choose == 3) {// 3. Withdraw
withdraw();
menu();
return 3;
}
if (choose == 4) {// 4. Log out
System.out.println("You are logged out.");
return 4;
}
if (choose <= 5) {// type in anything greater than 4 and you will get a
// system error
System.out.println("System Error");
menu();
return 5;
}
if (choose >= 1) {// type in anything less than 1 and you will get a
// system error
System.out.println("System Error");
menu();
return 6;
}
return choose;
}
public static void deposit()
{
Scanner input = new Scanner(System.in);
System.out.println("Enter deposit amount:");
double amount = input.nextDouble();
System.out.println("Your deposit amount: " + amount);
currentBalance += amount;
System.out.println("Your new balance is: " + currentBalance);
}
public static double displayBalance() {
System.out.println("Total balance is: $" + currentBalance);
oldBalance = 0.00;
return 1;
}
public static void withdraw()
{
Scanner input = new Scanner(System.in);
System.out.println("Enter withdrawal amount: ");
double amount = input.nextDouble();
System.out.println("Your withdrawal amount: " + amount);
currentBalance -= amount;
System.out.println("Your new balance is: " + currentBalance);
}
}
答案 2 :(得分:0)
package shraam.bank.atm;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.logging.Level;
public class CalculateMoneyAtm {
static Integer initialtwothousandrupees = 0;
static Integer initialhundressrupees = 0;
static Integer initialfiftyrupees = 0;
static Integer initialtenrupees = 0;
static Integer twothousandrupees = 0;
static Integer hundressrupees = 0;
static Integer fiftyrupees = 0;
static Integer tenrupees = 0;
static Integer totalAmount = 0;
public static void main(String[] args) {
ATMStatus atmStatus = new ATMStatus();
getMoney(atmStatus);
}//end of psvm
public static void reRun(ATMStatus atmStatus) {
MyLog.logit().info("Would u like to credit more money ? y/n");
System.out.println("Would u like to credit more money ? y/n ");
Scanner input = new Scanner(System.in);
String choice = input.nextLine();
if (choice.equals("y") || choice.equals("Y")) {
getMoney(atmStatus);
}
if (choice.equals("n") || choice.equals("N")) {
System.exit(1);
} else {
MyLog.logit().log(Level.SEVERE, "Invalid Input :"+choice);
System.out.println("Invalid Input");
}
reRun(atmStatus);
}
public static void getMoney(ATMStatus atmStatus) {
twothousandrupees = 0;
hundressrupees = 0;
fiftyrupees = 0;
tenrupees = 0;
totalAmount = 0;
Integer amountInt=0;
System.out.println("Currency Avaialbe in ATM");
for (String key : atmStatus.getAvaialableMoney().keySet()) {
System.out.println(atmStatus.getAvaialableMoney().get(key) + ":"
+ key + " Notes");
}
for (String key : atmStatus.getAvaialableMoney().keySet()) {
if (key.equals("2000"))
initialtwothousandrupees = atmStatus.getAvaialableMoney().get(key);
if (key.equals("100"))
initialhundressrupees = atmStatus.getAvaialableMoney().get(key);
if (key.equals("50"))
initialfiftyrupees = atmStatus.getAvaialableMoney().get(key);
if (key.equals("10"))
initialtenrupees = atmStatus.getAvaialableMoney().get(key);
}
Scanner input = new Scanner(System.in);
System.out.print("Enter Money > ");
String amount = input.nextLine();
try {
try{
amountInt = Integer.parseInt(amount);
if(amountInt%10!=0)
{
System.out.println("Please enter amount in multiple of 10 ");
reRun(atmStatus);
}
}catch(NumberFormatException ne){
MyLog.logit().log(Level.SEVERE, ne.getMessage());
}
System.out.print("Required Amount : ");
System.out.println(amount);
totalAmount = ((initialtwothousandrupees * 2000) + (initialhundressrupees * 100)
+ (initialfiftyrupees * 50) + (initialtenrupees * 10));
System.out
.println("Total Available amount in ATM : " + totalAmount);
if (totalAmount < amountInt) {
System.out
.println("Total Avaialble amount is less in atm, Sorry for Inconvience");
reRun(atmStatus);
}
while (amountInt >= 2000 && initialtwothousandrupees > 0) {
initialtwothousandrupees = initialtwothousandrupees - 1;
twothousandrupees++;
amountInt = amountInt - 2000;
}
while (amountInt >= 100 && initialhundressrupees > 0) {
initialhundressrupees = initialhundressrupees - 1;
hundressrupees++;
amountInt = amountInt - 100;
}
while (amountInt >= 50 && initialfiftyrupees > 0) {
initialfiftyrupees = initialfiftyrupees - 1;
fiftyrupees++;
amountInt = amountInt - 50;
}
while (amountInt >= 10 && initialtenrupees > 0) {
initialtenrupees = initialtenrupees - 1;
tenrupees++;
amountInt = amountInt - 10;
}
if (amountInt > 0) {
System.out.println("No avalable balance in this unit");
reRun(atmStatus);
} else {
System.out.println("Plz take your money in currency");
Map<String, Integer> avaialableMoney = new HashMap<String, Integer>();
System.out.println(" No of 2000:"+ twothousandrupees);
System.out.println(" No of 100:"+ hundressrupees);
System.out.println(" No of 50:"+ fiftyrupees);
System.out.println(" No of 10:"+ tenrupees);
avaialableMoney.put("2000", (initialtwothousandrupees));
avaialableMoney.put("100", (initialhundressrupees));
avaialableMoney.put("50", (initialfiftyrupees));
avaialableMoney.put("10", (initialtenrupees));
atmStatus.setAvaialableMoney(avaialableMoney);
}
//return amountInt;
} catch (Exception e) {
MyLog.logit().log(Level.SEVERE, e.getMessage());
}
System.out.println("Take your Amount = "+(2000*twothousandrupees+100*hundressrupees+50*fiftyrupees+10*tenrupees));
reRun(atmStatus);
}//end of getMoney
}
package shraam.bank.atm;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
public class ATMStatus {
public Map<String,Integer> avaialableMoney=new HashMap<String,Integer>();
public ATMStatus(){
MyLog.logit().log(Level.INFO, " ATMStatus Initialized");
avaialableMoney.put("2000", 10);
avaialableMoney.put("100", 10);
avaialableMoney.put("50", 10);
avaialableMoney.put("10", 10);
}
public Map<String, Integer> getAvaialableMoney() {
return this.avaialableMoney;
}
public void setAvaialableMoney(Map<String, Integer> avaialableMoney) {
this.avaialableMoney = avaialableMoney;
}
}
package shraam.bank.atm;
import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
public class MyLog {
public static Logger logit()
{
Logger logger = Logger.getLogger("MyLog");
FileHandler fh;
try {
// This block configure the logger with handler and formatter
fh = new FileHandler("C:/ArunTest/temp/MyLogFile.log");
logger.addHandler(fh);
SimpleFormatter formatter = new SimpleFormatter();
fh.setFormatter(formatter);
// the following statement is used to log any messages
logger.info("My first log");
} catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return logger;
}
}
//
output:
Nov 27, 2016 10:43:48 PM shraam.bank.atm.MyLog logit
INFO: My first log
Nov 27, 2016 10:43:48 PM shraam.bank.atm.ATMStatus <init>
SEVERE: ATMStatus
Currency Avaialbe in ATM
10:100 Notes
10:2000 Notes
10:50 Notes
10:10 Notes
Enter Money > 540
Required Amount : 540
Total Available amount in ATM : 21600
Plz take your money in currency
No of 2000:0
No of 100:5
No of 50:0
No of 10:4
Take your Amount = 540
Nov 27, 2016 10:43:52 PM shraam.bank.atm.MyLog logit
INFO: My first log
Nov 27, 2016 10:43:52 PM shraam.bank.atm.CalculateMoneyAtm reRun
INFO: Would u like to credit more money ? y/n
Would u like to credit more money ? y/n
y
Currency Avaialbe in ATM
5:100 Notes
10:2000 Notes
10:50 Notes
6:10 Notes
Enter Money > 2060
Required Amount : 2060
Total Available amount in ATM : 21060
Plz take your money in currency
No of 2000:1
No of 100:0
No of 50:1
No of 10:1
Take your Amount = 2060
Nov 27, 2016 10:44:04 PM shraam.bank.atm.MyLog logit
INFO: My first log
Nov 27, 2016 10:44:04 PM shraam.bank.atm.CalculateMoneyAtm reRun
INFO: Would u like to credit more money ? y/n
Would u like to credit more money ? y/n