Java 银行账户计划:拒绝存款或取款
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19297576/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Bank Account Program: Rejecting Deposit or Withdrawal
提问by Morgan
I have been working on making a program to simulate bank transactions. I have to ask the user if they want to deposit, withdrawal, or transfer. Right now I am working on the deposit and withdrawal options of the account.
我一直致力于制作一个程序来模拟银行交易。我必须询问用户是否要存款、取款或转账。现在我正在研究账户的存款和取款选项。
When the user selects a transaction (for example deposit) and enters a number, I made it so the program asks "Would you like to continue this transaction. Obviously, if yes the program will continue with the transaction and if no, it will not deposit the number the user entered.
当用户选择一笔交易(例如存款)并输入一个数字时,我这样做了,所以程序会询问“您是否要继续这笔交易。显然,如果是,程序将继续交易,如果不是,则不会存入用户输入的号码。
My problem is, I have no clue what I need to put in the no option. I don't know if to reject the transaction means I have to exit the loop or what but at the moment if I hit no, the transaction will still go through. Below is a visual of what happens when I enter a transaction but dont want to continue:
我的问题是,我不知道我需要在 no 选项中输入什么。我不知道拒绝交易是否意味着我必须退出循环或什么,但目前如果我点击否,交易仍将通过。下面是当我输入交易但不想继续时发生的情况的视觉效果:
below is my entire code. the part of code I don't know what to put has ** by it It probably don't help my organization I am sorry for that!
下面是我的整个代码。我不知道该放什么的那部分代码有 ** 它可能对我的组织没有帮助 我很抱歉!
import java.util.Scanner;
public class BankTransactions {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num;
double balance = 0;
double checkingBalance= 0, savingsBalance =0;
do {
double amount;
System.out.println("------------------------");
System.out.println("Select a Transaction by typing number");
System.out.println("1. Deposit");
System.out.println("2. Withdrawal");
System.out.println("3. Balance");
System.out.println("4. Exit");
System.out.println("------------------------");
num = scan.nextInt();
if (num == 1) { //if DEPOSIT is selected
//ask to deposit from checking or savings
System.out.println("------------------------");
System.out.println("Would you like to deposit in checking or savings?");
System.out.println("1. Checking");
System.out.println("2. Savings");
System.out.println("------------------------");
num = scan.nextInt();
if (num == 1) { //if CHECKING is selected
//enter amount to be deposited
System.out.println("------------------------");
System.out.println("Enter amount to deposit in checking account: ");
System.out.println("------------------------");
amount = scan.nextDouble();
//ask if they want to continue with transaction
System.out.println("------------------------");
System.out.println("Would you like to continue this transaction?");
System.out.println("1. Yes");
System.out.println("2. No");
System.out.println("------------------------");
num = scan.nextInt();
// Add the amount to the checking balance
checkingBalance += amount;
System.out.println("------------------------");
System.out.println("Your checking account's balance is " + checkingBalance);
System.out.println("------------------------");
} else if (num == 2) { //if SAVINGS is selected
//enter amount to be deposited
System.out.println("------------------------");
System.out.println("Enter amount to deposit in savings account: ");
System.out.println("------------------------");
amount = scan.nextDouble();
//ask if they want to continue with transaction
System.out.println("------------------------");
System.out.println("Would you like to continue this transaction?");
System.out.println("1. Yes");
System.out.println("2. No");
System.out.println("------------------------");
num = scan.nextInt();
if (num == 1) {
// Add the amount entered to the savings balance
savingsBalance += amount;
System.out.println("------------------------");
System.out.println("Your savings account's balance is " + savingsBalance);
System.out.println("------------------------");
**} else if (num == 2) {
//EMPTY NEEDS CODE
}**
}
} else if (num == 2) { //if withdrawal is selected
//ask to withdrawal from checking or savings
System.out.println("------------------------");
System.out.println("Would you like to withdrawal from checking or savings?");
System.out.println("1. Checking");
System.out.println("2. Savings");
System.out.println("------------------------");
num = scan.nextInt();
if (num == 1) { //if checking is selected
//enter amount to be withdrawn
System.out.println("------------------------");
System.out.println("Enter amount to withdrawal: ");
System.out.println("------------------------");
amount = scan.nextDouble();
//ask if they want to continue with transaction
System.out.println("------------------------");
System.out.println("Would you like to continue this transaction?");
System.out.println("1. Yes");
System.out.println("2. No");
System.out.println("------------------------");
num = scan.nextInt();
if (num == 1) { //if you say yes to continuing
// Remove the amount from the balance
checkingBalance -= amount;
System.out.println("------------------------");
System.out.println("Your checking account's balance is " + checkingBalance);
System.out.println("------------------------");
} else if (num == 2) { //if you say no to continuing
//Do not remove amount from savings balance
//EMPTY NEEDS CODE
}
} else if (num == 2) { //if savings is selected
//enter amount to be withdrawn
System.out.println("------------------------");
System.out.println("Enter amount to withdrawal: ");
System.out.println("------------------------");
amount = scan.nextDouble();
//ask if they want to continue with transaction
System.out.println("------------------------");
System.out.println("Would you like to continue this transaction?");
System.out.println("1. Yes");
System.out.println("2. No");
System.out.println("------------------------");
num = scan.nextInt();
if (num == 1) { //if you say yes to continuing
// Remove the amount from the savings balance
savingsBalance -= amount;
System.out.println("------------------------");
System.out.println("Your savings account's balance is " + savingsBalance);
System.out.println("------------------------");
} else if (num == 2) { //if you say no to continuing
//Do not remove amount from savings balance
//EMPTY NEEDS CODE
}
}
} else if (num == 3) { //if balance is selected
//ask to see balance of checking or savings
System.out.println("------------------------");
System.out.println("Your Checking balance is " + checkingBalance);
System.out.println("Your Savings balance is " + savingsBalance);
System.out.println("------------------------");
num = scan.nextInt();
//needs to return to transaction options
}
} while (num != 4);
System.out.println("------------------------");
System.out.println("Good Bye!");
System.out.println("------------------------");
}
}
}
I am stuck and I want to figure it out. Please don't post the entire code corrected. I want to fix it myself and learn!
我被卡住了,我想弄清楚。请不要发布更正的整个代码。我想自己修好学习!
采纳答案by Wael Awada
The transaction still goes through for the checking , not for the savings though.
交易仍然通过检查,而不是储蓄。
Here is the reason :
原因如下:
if (num == 1) { //if CHECKING is selected
//enter amount to be deposited
System.out.println("------------------------");
System.out.println("Enter amount to deposit in checking account: ");
System.out.println("------------------------");
amount = scan.nextDouble();
//ask if they want to continue with transaction
System.out.println("------------------------");
System.out.println("Would you like to continue this transaction?");
System.out.println("1. Yes");
System.out.println("2. No");
System.out.println("------------------------");
num = scan.nextInt();
// Add the amount to the checking balance
checkingBalance += amount;
System.out.println("------------------------");
System.out.println("Your checking account's balance is " + checkingBalance);
System.out.println("------------------------");
} else if (num == 2) { //if SAVINGS is selected
//enter amount to be deposited
System.out.println("------------------------");
System.out.println("Enter amount to deposit in savings account: ");
System.out.println("------------------------");
amount = scan.nextDouble();
//ask if they want to continue with transaction
System.out.println("------------------------");
System.out.println("Would you like to continue this transaction?");
System.out.println("1. Yes");
System.out.println("2. No");
System.out.println("------------------------");
num = scan.nextInt();
if (num == 1) {
// Add the amount entered to the savings balance
savingsBalance += amount;
System.out.println("------------------------");
System.out.println("Your savings account's balance is " + savingsBalance);
System.out.println("------------------------");
**} else if (num == 2) {
//EMPTY NEEDS CODE
}**
}
Notice the difference after the "num = scan.nextInt();" line in both cases? In the first one you are instructing it to go ahead and add anyway regardless of the input, in the second case, you have an if/else statement that would only add it if they user enters 1, and if he enters 2 , you would do nothing.
注意“num = scan.nextInt();”之后的区别 在这两种情况下都行吗?在第一个中,无论输入如何,您都指示它继续进行添加,在第二种情况下,您有一个 if/else 语句,只有当用户输入 1 时才会添加它,如果他输入 2 ,您将没做什么。
As for your question about what to do in case of any other option than 1 or 2. I would use an if statement to check if num is 1 without using an else statement, so if any other option is entered it would go to the beginning again. (But if you insist on 2 being "No", you could use else if(num != 2){System.out.println("Invalid Option. Going to the beginning";}
至于你的问题,如果有任何其他选项而不是 1 或 2,我会使用 if 语句来检查 num 是否为 1 而不使用 else 语句,因此如果输入任何其他选项,它将转到开头再次。(但如果你坚持 2 是“否”,你可以使用 else if(num != 2){System.out.println("Invalid Option. Going to the begin";}
回答by Rohit V Jain
You used do while loop. You need some terminate condition. Try with this code.
您使用了 do while 循环。你需要一些终止条件。尝试使用此代码。
Put num=4 in your program. It will solve your problem.
将 num=4 放入您的程序中。它会解决你的问题。
else if (num == 2) { //if you say no to continuing
//Do not remove amount from savings balance
//EMPTY NEEDS CODE
num=4;
}
回答by libik
The biggest problem I see is the way how you programming the options. The art of programming is usually in make the problem as simple as possible and easy to expand that problem.
我看到的最大问题是您如何对选项进行编程。编程的艺术通常是使问题尽可能简单并易于扩展该问题。
(Like if you make program for adding numbers, you dont care, if you are adding 3 numbers or 3 milions numbers).
(就像如果你编写程序来添加数字,你不在乎,如果你添加 3 个数字或 300 万个数字)。
If you are gonna expand options, it will be pain in the ass :). No matter if your "decesion tree" would be too big, it will be impossible to know what is happening there.
如果您要扩展选项,那将是痛苦的:)。无论你的“死亡树”是否太大,都不可能知道那里发生了什么。
You can create Option class :
您可以创建选项类:
public class Option {
公共类选项{
private List<Option> options = new ArrayList<>();
private String text;
public Option(String text) {
this.text = text;
}
public void addOption(Option option) {
getOptions().add(option);
}
/**
* @return the options
*/
public List<Option> getOptions() {
return options;
}
/**
* @return the text
*/
public String getText() {
return text;
}
public String tellUsWhatWeCanDo() {
String ret = "------------------------\n";
int count = 0;
for (Option option : options) {
count++;
ret += count + ". " + option.getText() + "\n";
}
ret += "------------------------\n";
return ret;
}
public Option whereToGo() {
while (1<2) {
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
if ((num >= 0) && (num < options.size())){
return options.get(num);
} else {
System.out.println("wrong number");
}
}
}
}
}
Then you can use this like this :
然后你可以像这样使用它:
public static void main(String[] args) throws IOException {
Option option1 = new Option("Start");
Option option2 = new Option("Deposit");
Option option3 = new Option("Withdrawal");
Option option4 = new Option("Balance");
Option option5 = new Option("Exit");
option1.addOption(option2);
option1.addOption(option3);
option1.addOption(option4);
option1.addOption(option5);
Option actualOption = option1;
while (1 < 2) {
System.out.println(actualOption.tellUsWhatWeCanDo());
actualOption = actualOption.whereToGo();
}
}
The output is :
输出是:
------------------------
1. Deposit
2. Withdrawal
3. Balance
4. Exit
------------------------
Note, that you can create automatic scanner option, which can iterate through the options the same way as it is printlined (=automated). (EDIT : I added that iterating)
请注意,您可以创建自动扫描仪选项,它可以像打印行(=自动)一样遍历选项。(编辑:我添加了迭代)
You can also create interface with "do" method and implements it inside and in every option you run the "do" method which can do the more complex work like "deposit, withdraw" etc.
您还可以使用“do”方法创建接口并在内部实现它,并且在您运行“do”方法的每个选项中,该方法可以执行更复杂的工作,例如“存款、取款”等。