无法解决或不是字段错误

时间:2018-02-06 20:22:11

标签: java object arraylist

我正在尝试搜索对象的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 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");
         }
      }    
   } 
}

我的第二个文件包含此

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

public Transaction(int argId, double argAmount,char argType, String 
argDescription){

  id = argId;
  type = argType;
  amount = argAmount;
  description = argDescription;
}

public void getId(int id){

}
public void getAmount(double amount){

}
public void getType(char type){

}
public void getDescription(String description){

}

}

我收到错误消息:argId无法解析或不是第58行的字段。我认为我的错误是argId不是ArrayList的一部分,我需要找到正确的tern来搜索ID代码在ArrayList中。

由于

3 个答案:

答案 0 :(得分:1)

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

public void getId(int id){
}

你应该这样写:

public int getId() {
    return id;
}

Transaction类中的字段声明为private。 然后以类似的方式改变你的其他吸气剂。

关于您的实际问题,您可以使用for-each循环:

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循环,请改变它:

for (int i = 0; i < argList.size(); i++) {
            if(argList.get(i).getId() == searchId){
                System.out.println("Yes");
                break;
            }
        }

答案 1 :(得分:0)

ArgId是列表中对象的属性,而不是列表本身的属性,这就是编译器为您提供错误的原因。

答案 2 :(得分:0)

看起来像一个错字: 你有:

argList.argId.get(ⅰ)。载(searchId)

尝试使用:  argList.get(ⅰ).argId.contains(searchId)

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

我建议封装类Transaction:

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

}