Java ATM Programme
Je suis en train de faire un programme acm et je vais avoir un moment difficile essayer de comprendre comment obtenir vraiment des dépôts et des retraits. La balance commence automatiquement de 0$, mais je ne peux pas obtenir quoi que ce soit de type I dans pour ajouter ou soustraire à ce que je fais mal?
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;
}
}
- Vous n'êtes pas à modifier les valeurs de l'équilibre...aussi, n'utilisez pas de méthode récursive appels pour cela, utilisez une
do-while
boucle à la place (au sein de votremenu
méthode)
Vous devez vous connecter pour publier un commentaire.
Quelques observations:
Votre classe ne devrait pas déclarer oldBalance, de dépôt, de retrait et comme des variables globales. La méthode de retrait ne devrait pas avoir accès au dépôt variable et vice versa. C'est une bonne pratique de programmation de limiter la portée de vos variables comme beaucoup que vous le pouvez. Parce qu'un "dépôt" de la variable n'est pas vraiment nécessaire en dehors de cette méthode, il n'y a absolument aucune raison d'en faire une variable globale. Le même ne peut pas être dit à propos de "l'équilibre actuel." Cette variable est nécessaire pour toutes les méthodes de la classe: dépôt, retrait, displayBalance, etc. Par conséquent, il ya une bonne raison pourquoi global (Encore, si vous pouvez résoudre le problème avec moins de portée, vous devriez le faire).
Je ne vois pas pourquoi
deposit()
etwithdrawal()
besoin de retourner quoi que ce soit.La plus simple de mise en œuvre de
deposit()
etwithdrawal()
est tout simplement ajouter l'entrée de l'utilisateur à l'currentBalance
et de l'enregistrer danscurrentBalance
.Vous n'êtes jamais enregistrement de la balance courante. L'opérateur == est un opérateur de comparaison, pas un opérateur d'affectation. Quand vous faites quelque chose comme ceci:
Ou comme ceci:
Tout ce que vous faites est de transmettre les valeurs de la
println()
méthode et non pas la mise à jour de la variable qui est censé tenir l'équilibre. En fait, la premiere impressionfalse
(à moins que le dépôt et la oldBalance sont à zéro). Si vous regardez mon code exemple,currentBalance += amount;
est un raccourci pourcurrentBalance = currentBalance + amount;
qui signifie "ajouter ceamount
àcurrentBalance
et de le stocker danscurrentBalance
. Parce que je suis la réutilisation de currentBalance, j'ai éliminé la nécessité d'uneoldBalance
variable.Plein D'Exécuter Du Code