找不到符号方法 - 我应该在哪里定义我的方法?
Cannot find symbol method - Where should I define my methods?
我正在 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
我的包中的两个相关文件(这里只粘贴相关部分)是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
我在别处读到我的问题是,这两个方法应该在 MustangBanking class 而不是帐户 class 中定义,并且它们应该在主要方法之外定义.但是当我这样做时,我会收到错误消息,无法找到我的所有变量等。我在这里忘记了什么?如果您需要更多 code/clarification,请告诉我,我会 post。
谢谢!
编辑:
野马银行 class
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;
-
帐户 class
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);
}
}
}
}
您正在 MustangBanking
class 中调用 Account
class 的方法,而没有使用 Account
class 的对象。这是导致问题的原因。
尝试更改以下主要方法代码:
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
帐号Class
将以下方法添加到帐户 class
public void add(Account a){
accounts.add(a)
}
从所有 switch case 中调用此方法:
//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 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);
}
}
}
您在调用 displayAccounts()
和 deleteAccount()
时没有创建帐户 class 的对象,因此出现错误
使用对象调用方法有两种方法。
- 如果方法相同class
- 如果有继承(MustangBanking extends Account)
如果您在 Account class 中没有任何其他方法,那么您可以直接扩展 Account
否则在 MustangBanking 中创建一个 Account 对象 class 然后调用上面的方法如下
Account account =new Account ();
account.displayAccounts();
account.deleteAccount();
我正在 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
我的包中的两个相关文件(这里只粘贴相关部分)是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
我在别处读到我的问题是,这两个方法应该在 MustangBanking class 而不是帐户 class 中定义,并且它们应该在主要方法之外定义.但是当我这样做时,我会收到错误消息,无法找到我的所有变量等。我在这里忘记了什么?如果您需要更多 code/clarification,请告诉我,我会 post。
谢谢!
编辑: 野马银行 class
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;
- 帐户 class
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);
}
}
}
}
您正在 MustangBanking
class 中调用 Account
class 的方法,而没有使用 Account
class 的对象。这是导致问题的原因。
尝试更改以下主要方法代码:
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
帐号Class 将以下方法添加到帐户 class
public void add(Account a){
accounts.add(a)
}
从所有 switch case 中调用此方法:
//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 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);
}
}
}
您在调用 displayAccounts()
和 deleteAccount()
时没有创建帐户 class 的对象,因此出现错误
使用对象调用方法有两种方法。
- 如果方法相同class
- 如果有继承(MustangBanking extends Account)
如果您在 Account class 中没有任何其他方法,那么您可以直接扩展 Account
否则在 MustangBanking 中创建一个 Account 对象 class 然后调用上面的方法如下
Account account =new Account ();
account.displayAccounts();
account.deleteAccount();