Java 方法未使用正确的已解析输入

Java 方法未使用正确的已解析输入,java,parsing,input,parameters,arguments,Java,Parsing,Input,Parameters,Arguments,我已经收到了一份几乎完成的作业,但是我遇到了一个我不知道如何解决的重大问题。我的问题是,当用户输入余额和它接受的名称时,但是当存款和取款方法运行时,它们不使用该数据,而是从默认值0开始 package assignment1; import java.util.Scanner; import java.util.ArrayList; public class TestBank { public static void main(String[] args) {

我已经收到了一份几乎完成的作业,但是我遇到了一个我不知道如何解决的重大问题。我的问题是,当用户输入余额和它接受的名称时,但是当存款和取款方法运行时,它们不使用该数据,而是从默认值0开始

package assignment1;

import java.util.Scanner;
import java.util.ArrayList;

public class TestBank {    
    public static void main(String[] args) {
        Bank bank = new Bank();

        bank.enterCustomers();

        System.out.println();
        System.out.println("==========================");
        System.out.println("Opening account balance");

        bank.printBalances();

        System.out.println();

        bank.banking();

        System.out.println();
        System.out.println("==========================");
        System.out.println("Closing account balance");
        bank.printBalances();
    }
}

class Bank {
    String accounts;
    Scanner scanner = new Scanner(System.in);
    Account account = new Account();

    public void enterCustomers() {
        ArrayList CustomerDetails = new ArrayList();
        while (true) {
            System.out.print("Enter Name: ");
            account.name = scanner.next();

            if (account.name.equals("q")) {
                break;
            } else {
                Input.promptText("Enter balance: ");
                account.balance = scanner.nextDouble();

                CustomerDetails.add(account.name);
                CustomerDetails.add(account.balance);

                System.out.println("Enter customer names or q to quit entering names");
            }
        }
    }

    public void printBalances() {
        System.out.println(account.name + " " + Math.round(account.balance * 100 / 100));
    }

    public void banking() {
        Account account = new Account();
        account.deposit();
        account.withdraw();

        int Newbalance = (int) (Math.round(account.balance));

        switch (Newbalance) {
            case 1:
                account.deposit();
                break;
            case 2:
                account.withdraw();
                break;
            case 0:
                System.exit(0);
            default:
                break;
        }
    }

    class Account {
        private String name;
        private double balance;

        public Account() {
            this.name = name;
            this.balance = balance;
        }

        public String getName() {
            return this.name;
        }

        public double getBalance() {
            return this.balance;
        }

        public double deposit() {
            Input.promptText("Enter a valid deposit: ");
            double amount = scanner.nextDouble();

            balance = balance + amount;

            Input.promptText("your balance after your deposit is: " + balance);
            return balance;
        }

        public double withdraw() {
            System.out.println();
            Input.promptText("Enter a valid withdraw: ");
            double amount = scanner.nextDouble();

            if (amount > balance); else {
                balance = balance - amount;
            }

            System.out.println("your balance after your withdrawal is: " + balance);
            return balance;
        }
    }
}

class Input {
    private static Scanner scanner = new Scanner(System.in);

    public static String getText() {
        return scanner.nextLine();
    }

    public static String getText(String prompt) {
        System.out.print(prompt);
        return scanner.nextLine();
    }

    public static String getString() {
        return scanner.nextLine();
    }

    public static String getString(String prompt) {
        System.out.print(prompt);
        return scanner.nextLine();
    }

    public static double getDouble() {
        return scanner.nextDouble();
    }

    public static double getDouble(String prompt) {
        System.out.print(prompt);
        return scanner.nextDouble();
    }

    public static void promptText(String text) {
        System.out.printf("%s", text);
    }

    public static void outputText(String text) {
        System.out.printf("%s\n", text);
    }

    public static void outputInteger(String text, int value) {
        System.out.printf("%s%d\n", text, value);
    }

    public static void outputDouble(String text, double value) {
        outputDouble(text, value, 2);
    }

    public static void outputDouble(String text, double value, int decimalPlaces) {
        System.out.printf("%s%." + decimalPlaces + "f\n", text, value);
    }

    public static void outputBoolean(String text, boolean value) {
        System.out.printf("%s%b\n", text, value);
    }
}
还有,我怎样才能做到这一点,例如,输入的名字是John,输入是300。添加了另一个名称,比如输入400的Adam,这样它会打印Johns balance=300,Adams input=400

您的错误在banking()方法中。您正在创建新帐户并在其上操作,而不是在以前创建的帐户上操作

public void banking() {

    // remove the below line
    // Account account = new Account();

    account.deposit();
    account.withdraw();

    int Newbalance = (int) (Math.round(account.balance));

    switch (Newbalance) {
        case 1:
            account.deposit();
            break;
        case 2:
            account.withdraw();
            break;
        case 0:
            System.exit(0);
        default:
            break;
    }
}
以下是输出:

Enter Name: test
Enter balance: 500
Enter customer names or q to quit entering names
Enter Name: q

==========================
Opening account balance
q 500

Enter a valid deposit: 100
your balance after your deposit is: 600.0
Enter a valid withdraw: 50
your balance after your withdrawal is: 550.0

==========================
Closing account balance
q 550
另一个错误是,当帐户
name!=q
但您是按最后一个帐户操作的。您只存储一个帐户,而不是所有帐户。在上面的例子中,它应该在account
test
上运行,而不是在account
q
上运行

因此,要修复它,您应该修复enterCustomers()方法:

现在输出为:

Enter Name: test
Enter balance: 500
Enter customer names or q to quit entering names
Enter Name: q

==========================
Opening account balance
test 500

Enter a valid deposit: 100
your balance after your deposit is: 600.0
Enter a valid withdraw: 50
your balance after your withdrawal is: 550.0

==========================
Closing account balance
test 550

banking()
您创建了
Account Account=new Account()
与存储在
account
字段中的帐户不同,该字段在
entercustors()
method中使用。提示:我所知道的大多数银行都有很多帐户,而不仅仅是一个。您是否建议公共帐户(){this.name=name;this.balance=balance;}需要参数?更改account()帐户(字符串名称,双倍余额)是的,
帐户的构造函数至少有一个
字符串名称
参数肯定会有帮助,因为目前无法设置
帐户
名称
属性。
public void setName(String name)
方法也是一个选项,可以是更改构造函数的附加方法,也可以是替换方法。谢谢你在这里帮了我很大的忙。那么,当我仍然发现它只允许我为一个帐户输入存款和取款,并且只打印一个帐户的详细信息时,我该如何输入多个帐户呢?您可以将帐户自身存储在HashMap上,并使用名称,在取款和存款方法中使用帐户名称。因此,您可以对特定帐户进行操作。然后使用arraylist并在列表上迭代搜索名为的用户。您应该将
account
变量自身存储在
arraylist
银行类内,并将
entercustors()
方法内的代码更改为
CustomerDetails.add(account)
Enter Name: test
Enter balance: 500
Enter customer names or q to quit entering names
Enter Name: q

==========================
Opening account balance
test 500

Enter a valid deposit: 100
your balance after your deposit is: 600.0
Enter a valid withdraw: 50
your balance after your withdrawal is: 550.0

==========================
Closing account balance
test 550