2

我一直在制作一个模拟银行交易的程序。我必须询问用户是否要存款、取款或转账。现在我正在研究账户的存款和取款选项。

当用户选择一笔交易(例如存款)并输入一个数字时,我做了,所以程序会询问“你想继续这笔交易吗?显然,如果是,程序将继续交易,如果不是,它不会存入用户输入的号码。

我的问题是,我不知道我需要在 no 选项中添加什么。我不知道拒绝交易是否意味着我必须退出循环或什么,但目前如果我点击“否”,交易仍然会通过。下面是当我输入交易但不想继续时发生的情况的视觉效果:

在此处输入图像描述

下面是我的整个代码。我不知道该放什么的代码部分有**它可能对我的组织没有帮助我很抱歉!

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("------------------------");

}

}

我被困住了,我想弄清楚。请不要发布更正的整个代码。我想自己修复它并学习!

4

3 回答 3

3

我看到的最大问题是您对选项进行编程的方式。编程的艺术通常在于使问题尽可能简单并易于扩展该问题。

(就像如果您制作用于添加数字的程序,您不在乎,如果您添加 3 个数字或 3 百万个数字)。

如果您要扩展选项,那将是痛苦的:)。无论您的“决策树”是否太大,都不可能知道那里发生了什么。

您可以创建选项类:

公共类选项{

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");
        }
    }
}

}

然后你可以像这样使用它:

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();
    }
}

输出是:

------------------------
1. Deposit
2. Withdrawal
3. Balance
4. Exit
------------------------

请注意,您可以创建自动扫描仪选项,它可以像打印线(=自动)一样迭代选项。(编辑:我补充说迭代)

您还可以使用“do”方法创建接口并在内部实现它,并且在每个选项中运行“do”方法,该方法可以完成更复杂的工作,例如“存款,取款”等。

于 2013-10-10T14:16:24.447 回答
3

交易仍然是为了检查,而不是为了节省。

这是原因:

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
                        }**
                }

注意“num = scan.nextInt();”之后的区别 在这两种情况下都行?在第一个中,无论输入如何,您都指示它继续添加,在第二种情况下,您有一个 if/else 语句,只有在用户输入 1 时才会添加它,如果他输入 2 ,您会没做什么。

至于您关于在除 1 或 2 之外的任何其他选项的情况下该怎么做的问题。我会使用 if 语句来检查 num 是否为 1 而无需使用 else 语句,因此如果输入任何其他选项,它将转到开头再次。(但如果你坚持 2 是“否”,你可以使用 else if(num != 2){System.out.println("Invalid Option. Going to the beginning";}

于 2013-10-10T14:35:51.250 回答
0

您使用了 do while 循环。你需要一些终止条件。试试这个代码。

将 num=4 放入您的程序中。它会解决你的问题。

    else if (num == 2) { //if you say no to continuing
        //Do not remove amount from savings balance
        //EMPTY NEEDS CODE
        num=4;
     }
于 2013-10-10T14:06:29.320 回答