java - 如果我从另一个类调用它,为什么我的 ArrayList 是空的?

标签 java class arraylist methods parameter-passing

我是 Java 的新手,我将不胜感激。

关于我的代码的一些事情

我有两个类(class)。

  1. 第一类称为 EvidenceBox.class
  2. 二等舱称为 Police.class

在 EvidenceBox 类中,我有一个名为 getParticularEvidence() 的方法

    public ArrayList <Evidence> getParticularEvidence(int caseNumber, String evidenceType) {
      EvidenceBox e = new EvidenceBox(caseNumber, evidenceType);
      return e.getEvidenceByType(caseNumber, evidenceType);
    }

此方法所做的是将 caseNumber 和 evidenceType 作为参数。在此方法中,我们正在创建 EvidenceBox 类的对象实例,以便我可以调用 EvidenceBox 类中的另一个名为 getEvidenceByType() 的方法。此方法的全部要点是采用上面的这两个参数并将其传递给另一个类中的另一个方法,该类在 for 循环中有一个 if 语句,用于检查参数是否等于 ArrayList 中称为 evidenceBoxList 的内容,如果相等则返回相等的证据列表。

当我在主类中调用它时:

System.out.println(crimeBoxOne.getEvidenceByType(2005000381, "S.Avery"));

它的作用是转到 getEvidenceByType 方法,然后调用 Evidence 类中的另一个方法:

    public ArrayList < Evidence > getEvidenceByType(int keyNumber, String keyName) {
      ArrayList < Evidence > setOfEvidence = new ArrayList < > (evidenceBoxList);
      for (Evidence e: setOfEvidence) {
        if (this.getCaseNumber() == keyNumber) {
          if (this.getCaseName().equals(keyName)) {
            System.out.println("Pieces of DNA Evidence in Evidence Box number " + this.getCaseNumber() + " found by " + this.getCaseName() + ": " + this.getEvidence());
            getEvidence().add(e);
          } else {
            System.out.println("Not found!");
          }
        } else {
          System.out.println("Not Found!");
        }
      }
      return getEvidence();
    }

getCaseNumber为EvidenceBox编号,getCaseName为EvidenceBox名称

我的问题

我的问题是列表的返回总是空的,即使这不是因为我将 EvidenceBox 添加到 ArrayList。我该如何解决这个问题?

getEvidence() 是返回 evidenceBox 列表的 getter 方法。

这是我的 EvidenceBox 类:

package looselycoupled;

import java.util.*;

public class EvidenceBox {
  private int caseNumber;
  private String caseName;
  private ArrayList evidenceBoxList;

  public EvidenceBox(int caseNumber, String caseName) {
    this.evidenceBoxList = new ArrayList < Evidence > ();
    this.caseNumber = caseNumber;
    this.caseName = caseName;
  }

  public ArrayList < Evidence > getEvidenceByType(int keyNumber, String keyName) {
    ArrayList < Evidence > setOfEvidence = new ArrayList < > (evidenceBoxList);
    for (Evidence e: setOfEvidence) {
      if (this.getCaseNumber() == keyNumber) {
        if (this.getCaseName().equals(keyName)) {
          System.out.println("Pieces of DNA Evidence in Evidence Box number " + this.getCaseNumber() + " found by " + this.getCaseName() + ": " + this.getEvidence());
          getEvidence().add(e);
        } else {
          System.out.println("Not found!");
        }
      } else {
        System.out.println("Not Found!");
      }
    }
    return getEvidence();
  }

  public void add(Evidence getTypeFromEvidenceClass) {
    evidenceBoxList.add(getTypeFromEvidenceClass);
  }


  public ArrayList < Evidence > getEvidence() {
    return evidenceBoxList;
  }



  public void printRecordsOfTheEvidence() {
    Set < Evidence > setOfEvidence = new HashSet < > (evidenceBoxList);
    for (Evidence e: setOfEvidence) {
      System.out.println(Collections.frequency(evidenceBoxList, e) + "x " + e);
    }
  }

  public int getCaseNumber() {
    return caseNumber;
  }

  public String getCaseName() {
    return caseName;
  }

  @
  Override
  public String toString() {
    return caseNumber + " " + caseName;
  }
}

和警察类:

package looselycoupled;

import java.util.ArrayList;

public class Cop {
    private String name;
    //private ArrayList collectionOfEvidences = new ArrayList<>();
    private ArrayList<EvidenceBox> collectionOfEvidences = new ArrayList<>();
    public Cop(String name) {
        this.name = name;
    }

    public void copTakesAnEvidenceBox(EvidenceBox box) {
        collectionOfEvidences.add(box);
    }

    public ArrayList<Evidence> getParticularEvidence(int caseNumber, String evidenceType) {
        EvidenceBox e = new EvidenceBox(caseNumber, evidenceType);
        return e.getEvidenceByType(caseNumber, evidenceType);
    }

    public ArrayList<EvidenceBox> getEvidence() {
        return collectionOfEvidences;
    }

    public String toString() {
        return name;
    }
}

最佳答案

evidenceBoxListEvidenceBox 类私有(private)的。

每当您执行 EvidenceBox e = new EvidenceBox(caseNumber, evidenceType); 时,它都会创建此列表的一个没有值的新空白实例。

接下来您将迭代此列表并尝试使用以下代码添加一个值:

ArrayList < Evidence > setOfEvidence = new ArrayList < > (evidenceBoxList);
    for (Evidence e: setOfEvidence) {
      if (this.getCaseNumber() == keyNumber) {
        if (this.getCaseName().equals(keyName)) {
          System.out.println("Pieces of DNA Evidence in Evidence Box number " + this.getCaseNumber() + " found by " + this.getCaseName() + ": " + this.getEvidence());
          getEvidence().add(e);
        } else {
          System.out.println("Not found!");
        }
      } else {
        System.out.println("Not Found!");
      }
    }
    return getEvidence();
  }

现在,由于您最初在 evidenceBoxList 中没有任何元素,因此它永远不会进入 for 循环,也永远不会调用 add() 方法.

getEvidence() 方法然后将这个空白列表返回给您。

在for循环之前添加getEvidence().add(new Evidence(keyNumber,keyName));来验证问题。

ArrayList < Evidence > setOfEvidence = new ArrayList < > (evidenceBoxList);
    /* Add Here */
    getEvidence().add(new Evidence(keyNumber,keyName));
    for (Evidence e: setOfEvidence) {
        /* Rest of the code */

现在,它应该返回包含一个对象的列表。

关于java - 如果我从另一个类调用它,为什么我的 ArrayList 是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35104595/

相关文章:

java - 给定列表列表的唯一元素列表

java - 将对象属性映射到 Java 映射的最简单方法

Java:获取变量的类

java - jdbctemplate,jpatemplate

java.lang.IllegalStateException : Two different ViewHolders have the same stable ID

python - 如何在 Python 中的类中引用静态属性?

特征的 PHP instanceof

javascript - 如何将javascript类构造函数参数动态映射到实例属性

java - 更新/重新创建 JList

java - 在数组列表中添加值