-1

Java でバンキング プログラムを作成していますが、いくつかのメソッドを正しく呼び出すのに苦労しています。ファイルをコンパイルしようとすると、次のエラーが表示されます。

MustangBanking.java:74: error: cannot find symbol
            displayAccounts();
            ^
  symbol:   method displayAccounts()
  location: class MustangBanking

MustangBanking.java:75: error: cannot find symbol
            deleteAccount();
            ^
  symbol:   method deleteAccount()
  location: class MustangBanking
2 errors

パッケージ内の 2 つの関連ファイル (関連部分のみをここに貼り付けます) は、MustangBanking.java です。

public class MustangBanking {

public static void main(String[] args) {

    //Declare and initialize data fields
//irrelevant code
case 3:
    displayAccounts();
    deleteAccount();
    break;
//more irrelevant code

および Account.java

public class Account {

//Declare and initialize data fields
//irrelevant code
    public void deleteAccount() {
        //method code
    }
    public void displayAccounts() {
        //method code
    }
//irrelevant code

私の問題は、問題の 2 つのメソッドが Account クラスではなく MustangBanking クラスで定義されるべきであり、メイン メソッドの外で定義されるべきであるということです。しかし、そうすると、すべての変数などが見つからないというエラーが発生します。ここで私は何を忘れていますか?さらにコードや説明が必要な場合はお知らせください。投稿します。

ありがとうございました!

編集: MustangBanking クラス

import java.util.*;
import java.io.*;

//MustangBanking class
public class MustangBanking {

public static void main(String[] args) {

    //Declare and initialize data fields
    int id = 1000;
    double depositAmount = 0.0;
    double withdrawAmount = 0.0;
    double checkAmount = 0.0;
    double balance = 0.0;
    double annualInterestRate = 0.0;
    boolean run = true;
    int option;
    Scanner in = new Scanner(System.in);
    Account account = new Account();

    //Create ArrayList of type Account to store all Account objects
    ArrayList<Account> accounts = new ArrayList<>();

    //Loop to run the program inside of
    while (run) {

        //Display the menu
        System.out.println("\nMUSTANG BANKING MENU");
        System.out.println("\n1 -- Create a new checking account");
        System.out.println("2 -- Create a new savings account");
        System.out.println("3 -- Delete an existing account");
        System.out.println("4 -- View a specific account");
        System.out.println("5 -- View all accounts");
        System.out.println("6 -- Write checks for a checking account");
        System.out.println("7 -- Deposit funds into an account");
        System.out.println("8 -- Withdraw funds from an account");
        System.out.println("9 -- Find account with the largest balance");
        System.out.println("10 -- Exit");
        System.out.println("\nEnter Option:");
        option = in.nextInt();

        //Switch statement to direct program based on option entered by user
        switch (option) {

            //create a new checking account
            case 1:
            CheckingAccount c1 = new CheckingAccount(id, balance, annualInterestRate); //Create a new CheckingAccount object
            id++; //increment id by 1
            accounts.add(c1); //add the new CheckingAccount to the Arraylist accounts
            break;

            //create a new savings account
            case 2:
            SavingsAccount s1 = new SavingsAccount(id, balance, annualInterestRate); //create a new SavingsAccount object
            id++; //increment id by 1
            accounts.add(s1); //add the new SavingsAccount to the ArrayList accounts
            break;

            //delete an existing account
            case 3:
            //c1.displayAccounts();
            //c1.deleteAccount();
            break;

- アカウント クラス

import java.util.*;
import java.io.*;

//Account class
public class Account {

//Declare and initialize data fields
protected int id = 1000;
protected double balance = 0.0;
protected double annualInterestRate = 0.0;
protected double monthlyInterestRate;
protected Date dateCreated;
protected double depositAmount = 0.0;
protected int pendingChecks = 0;

Scanner in = new Scanner(System.in);

//Create ArrayList of type Account to store all Account objects
ArrayList<Account> accounts = new ArrayList<>(); //do i need to create the arraylist in every class?

//Delete account
public void deleteAccount() {
    System.out.println("\nPlease enter the ID of the account you wish to delete:");
    id = in.nextInt(); //take user input of id to delete
    accounts.remove(id); //remove the account
}

//Display all accounts
public void displayAccounts() {
    System.out.println("\nAvailable accounts:\n");
    for (int i = 0; i < accounts.size(); i++) {
        System.out.println(accounts.get(i).getId()); //print the id instead of the index
    }
}

//Display one account
public void displayAccount() {
    //Prompt user for the account they want to view
    System.out.println("\nPlease enter the ID of the account you would like to view:");
    id = in.nextInt();

    //Print the account information
    for (int i = 0; i < accounts.size(); i++) {
        if (accounts.get(i).getId() == id) {
            //if savings account
            if (accounts.get(i) instanceof SavingsAccount) { 
                System.out.println("Account type: Savings");
            }
            //if checking account
            else if (accounts.get(i) instanceof CheckingAccount) {
                System.out.println("Account type: Checking");
            }
        }
    }
    System.out.println("Account: " + id); //Print ID
    System.out.println("Balance: " + balance); //Print balance
    System.out.println("Date created: " + dateCreated); //Print date created
    System.out.println("Annual interest rate: " + annualInterestRate + "%"); //Print annual interest rate   
    //if checking account, print number of pending checks
    for (int i = 0; i < accounts.size(); i++) {
        if (accounts.get(i).getId() == id) {
            if (accounts.get(i) instanceof CheckingAccount) {
                System.out.println("Number of pending checks: " + pendingChecks);
            }
        }
    } 
}
4

2 に答える 2

0

displayAccounts()Account クラスのオブジェクトを作成せdeleteAccount()ずに呼び出しているため、エラーが発生しています

オブジェクトを使用してメソッドを呼び出す方法は 2 つあります。

  1. メソッドが同じクラスにある場合
  2. 継承がある場合(MustangBanking extends Account )

Account クラスに他のメソッドがない場合は、 Account を直接拡張できます

それ以外の場合は、MustangBanking クラスで Account のオブジェクトを作成し、上記のメソッドを以下のように呼び出します。

Account account =new Account ();
account.displayAccounts();
account.deleteAccount();
于 2015-12-04T05:13:02.027 に答える
0

クラスのオブジェクトを使用せずに、Accountクラス内でクラスのメソッドを呼び出しています。これが問題の原因です。MustangBankingAccount

以下のメイン メソッド コードを変更してみてください。

public static void main(String[] args) {
    Account account = new Account();
    //Declare and initialize data fields
    //irrelevant code

    case 3:
        account.displayAccounts();
        account.deleteAccount();
        break;
    //more irrelevant code

Account クラス Account クラス に以下のメソッドを追加します

public void add(Account a){
    accounts.add(a)
}

すべての switch ケースからこのメソッドを呼び出します。

    //Switch statement to direct program based on option entered by user
    switch (option) {

        //create a new checking account
        case 1:
        CheckingAccount c1 = new CheckingAccount(id, balance, annualInterestRate); //Create a new CheckingAccount object
        id++; //increment id by 1
        account.add(c1); //add the new CheckingAccount to the Arraylist accounts
        break;

        //create a new savings account
        case 2:
        SavingsAccount s1 = new SavingsAccount(id, balance, annualInterestRate); //create a new SavingsAccount object
        id++; //increment id by 1
        account.add(s1); //add the new SavingsAccount to the ArrayList accounts
        break;

        //delete an existing account
        case 3:
        //c1.displayAccounts();
        //c1.deleteAccount();
        break;

Delete メソッド

//Delete account
public void deleteAccount() {
     System.out.println("\nPlease enter the ID of the account you wish to    delete:");
     id = in.nextInt(); //take user input of id to delete
     Iterator<Account> iAccount = accounts.iterator();
     while(iAccount.hasNext()){
          Account account = iAccount.next();
          if(account.getId()==id){
                accounts.remove(account);
          }
     }
 }
于 2015-12-04T05:07:19.660 に答える