【发布时间】:2016-05-08 08:57:22
【问题描述】:
我是 Java 新手,非常感谢您的帮助。
关于我的代码的注意事项
我有两节课。
- 第一类称为 EvidenceBox.class
- 第二类称为 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 类的 Object 实例,以便我可以调用 EvidenceBox 类中的另一个名为 getEvidenceByType() 的方法。这个方法的重点是把上面的这两个参数传递给另一个类中的另一个方法,该方法在 for 循环中有一个 if 语句,用于检查参数是否等于 ArrayList 中称为evidenceBoxList 的东西,如果相等,则返回相等的证据列表。
当我在 Main 类中调用它时:
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;
}
}
【问题讨论】:
-
请发
getEvidence()的代码。您的代码的问题之一是if conditions即if (this.getCaseNumber() == keyNumber)和if (this.getCaseName().equals(keyName))始终为真,因为您正在比较设置给对象并传递给函数的相同值。你不应该改用e.getCaseNumber()和e.getCaseName()吗? -
这是 getEvidence(): public ArrayList
getEvidence() { return evidenceBoxList; } -
你在哪里/如何向
evidenceBoxList添加元素? -
这是添加方法:@user140547 ` public void add(Evidence getTypeFromEvidenceClass) { evidenceBoxList.add(getTypeFromEvidenceClass); } `
-
您正在迭代
setOfEvidence列表。但是如果这个列表是空的,我猜它最初是空的,则永远不会调用add()方法。
标签: java class arraylist methods parameter-passing