Java 无法解析或不是字段错误

Java 无法解析或不是字段错误,java,object,arraylist,Java,Object,Arraylist,我试图在对象的数组列表中搜索ID代码,但我被卡住了 import java.util.Scanner; import java.util.ArrayList; public class Homework01{ public static void main(String[] args){ ArrayList<Transaction> argList = new ArrayList<Transaction>(); Scanner inp

我试图在对象的数组列表中搜索ID代码,但我被卡住了

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

public class Homework01{

   public static void main(String[] args){
      ArrayList<Transaction> argList = new ArrayList<Transaction>();

      Scanner input = new Scanner(System.in);
      System.out.println("Transaction List Menu");
      System.out.println("=====================");
      System.out.println("1) Add Transaction.");
      System.out.println("2) Search Transactions.");
      System.out.println("3) Filter.");
      System.out.println("4) Display All Transactions.");
      System.out.println("5) Exit.");
      int menu = input.nextInt();

      while (menu != 5) {
         switch (menu) {
            case 1: 
               addTransaction(argList);
               break;
            case 2: 
               ;// Search Transaction
               break;
            case 3: 
               ;// Filter Withdraws and Deposits
               break;
            case 4: 
               ;// Display transactions
               break;
            case 5: 
               System.out.println("End");
               break;
            default: 
               System.out.println("Invalid response");
               break;
         }
         menu = input.nextInt();
      }     
   }

   public static void addTransaction(ArrayList<Transaction> argList) {
      Scanner input = new Scanner(System.in);
      int tempId;
      double tempAmount;
      char tempType;
      String tempDescription;
      System.out.println("Enter in an ID for the transaction: ");
      tempId = input.nextInt();
      System.out.println("Enter in the amount of money: ");
      tempAmount = input.nextDouble();
      System.out.println("W for withdraw, D for deposit: ");
      tempType = input.next(".").charAt(0);
      System.out.println("Give transaction a description: ");
      tempDescription = input.next();
      //add transaction
      argList.add(new Transaction(tempId, tempAmount, tempType, tempDescription)   );    }

   public static void searchTransactions(ArrayList<Transaction> argList){
      Scanner input = new Scanner(System.in);
      System.out.println("Please type in transaction ID: ");
      int searchId = input.nextInt();
      for(int i=0;i<argList.size();i++){
         if(argList.argId.get(i).contains(searchId)){
            System.out.println("Yes");
         }
      }    
   } 
}
我得到了错误消息:argId无法解析或者不是第58行的字段。我认为我的错误是argId不是ArrayList的一部分,我需要找到正确的tern来搜索ArrayList中的ID代码


谢谢

ArgId是列表中对象的属性,而不是列表本身的属性,这就是为什么编译器会给您一个错误。

看起来像是输入错误: 你有:

argList.argId.geti.containssearchId

尝试使用: argList.geti.argId.containsSearchd

argList是一个集合,然后获取对象,读取argId并检查它是否包含searchId

我建议封装类事务:

public class Transaction {
private int id;
private char type;
private double amount;
private String description;

public Transaction(int argId, double argAmount, char argType, String argDescription) {
    id = argId;
    type = argType;
    amount = argAmount;
    description = argDescription;
}


public int getId() {
    return id;
}

public char getType() {
    return type;
}

public double getAmount() {
    return amount;
}

public String getDescription() {
    return description;
}
}

然后主类将以以下方式进行查看:

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

public class Homework01{
public static void main(String[] args){
    ArrayList<Transaction> argList = new ArrayList<Transaction>();
    Scanner input = new Scanner(System.in);
    System.out.println("Transaction List Menu");
    System.out.println("=====================");
    System.out.println("1) Add Transaction.");
    System.out.println("2) Search Transactions.");
    System.out.println("3) Filter.");
    System.out.println("4) Display All Transactions.");
    System.out.println("5) Exit.");
    int menu = input.nextInt();
    while (menu != 5) {

        switch (menu) {
            case 1: ; addTransaction(argList);
                break;
            case 2: ;// Search Transaction
                break;
            case 3: ;// Filter Withdraws and Deposits
                break;
            case 4: ;// Display transactions
                break;
            case 5: System.out.println("End");
                break;
            default: System.out.println("Invalid response");
                break;
        }
        menu = input.nextInt();
    }
}
public static void addTransaction(ArrayList<Transaction> argList) {
    Scanner input = new Scanner(System.in);
    int tempId;
    double tempAmount;
    char tempType;
    String tempDescription;
    System.out.println("Enter in an ID for the transaction: ");
    tempId = input.nextInt();
    System.out.println("Enter in the amount of money: ");
    tempAmount = input.nextDouble();
    System.out.println("W for withdraw, D for deposit: ");
    tempType = input.next(".").charAt(0);
    System.out.println("Give transaction a description: ");
    tempDescription = input.next();
    //add transaction
    argList.add(new Transaction(tempId, tempAmount, tempType, tempDescription)
    );
}

public static void searchTransactions(ArrayList<Transaction> argList){
    Scanner input = new Scanner(System.in);
    System.out.println("Please type in transaction ID: ");
    int searchId = input.nextInt();
    for(int i=0;i<argList.size();i++){
        if(argList.get(i).getId()==searchId){
            System.out.println("Yes");
        }
    }
}
for (int i = 0; i < argList.size(); i++) {
            if(argList.get(i).getId() == searchId){
                System.out.println("Yes");
                break;
            }
        }

}

之前,在编辑问题之前,您使用了错误的getter方法。 而不是

public void getId(int id){
}
你应该这样写:

public int getId() {
    return id;
}
将事务类中的字段声明为private。 然后以类似的方式更改其他getter

关于您的实际问题,您可以为每个循环使用:

public static void searchTransactions(ArrayList<Transaction> argList) {
    try (Scanner input = new Scanner(System.in)) {
        System.out.println("Please type in transaction ID: ");
        int searchId = input.nextInt();
        for (Transaction transaction : argList) {
            if (transaction.getId() == searchId) {
                System.out.println("Yes");
                break;
            }
        }
    }
}
如果您坚持使用i循环,请按以下方式进行更改:

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

public class Homework01{
public static void main(String[] args){
    ArrayList<Transaction> argList = new ArrayList<Transaction>();
    Scanner input = new Scanner(System.in);
    System.out.println("Transaction List Menu");
    System.out.println("=====================");
    System.out.println("1) Add Transaction.");
    System.out.println("2) Search Transactions.");
    System.out.println("3) Filter.");
    System.out.println("4) Display All Transactions.");
    System.out.println("5) Exit.");
    int menu = input.nextInt();
    while (menu != 5) {

        switch (menu) {
            case 1: ; addTransaction(argList);
                break;
            case 2: ;// Search Transaction
                break;
            case 3: ;// Filter Withdraws and Deposits
                break;
            case 4: ;// Display transactions
                break;
            case 5: System.out.println("End");
                break;
            default: System.out.println("Invalid response");
                break;
        }
        menu = input.nextInt();
    }
}
public static void addTransaction(ArrayList<Transaction> argList) {
    Scanner input = new Scanner(System.in);
    int tempId;
    double tempAmount;
    char tempType;
    String tempDescription;
    System.out.println("Enter in an ID for the transaction: ");
    tempId = input.nextInt();
    System.out.println("Enter in the amount of money: ");
    tempAmount = input.nextDouble();
    System.out.println("W for withdraw, D for deposit: ");
    tempType = input.next(".").charAt(0);
    System.out.println("Give transaction a description: ");
    tempDescription = input.next();
    //add transaction
    argList.add(new Transaction(tempId, tempAmount, tempType, tempDescription)
    );
}

public static void searchTransactions(ArrayList<Transaction> argList){
    Scanner input = new Scanner(System.in);
    System.out.println("Please type in transaction ID: ");
    int searchId = input.nextInt();
    for(int i=0;i<argList.size();i++){
        if(argList.get(i).getId()==searchId){
            System.out.println("Yes");
        }
    }
}
for (int i = 0; i < argList.size(); i++) {
            if(argList.get(i).getId() == searchId){
                System.out.println("Yes");
                break;
            }
        }

所以,若argId是对象的属性,而不是列表的属性,那个么我不就在那个地方使用id吗?我试过了,但没用。放在那个位置的合适术语是什么?您必须首先从列表argList中选择一个元素:argList.getiNext point,您的方法声明特别是getter方法很奇怪,它们返回void并有一个参数-这对setter方法更有意义…argList.geti.containsserchid也是一个错误。如果目标是经常按ID查找对象,我建议也使用HashMap。事务类没有名为argId的字段,有一个字段id,其值是从构造函数中的argID设置的。