使用Listiterator返回列表中所有元素的Java方法

使用Listiterator返回列表中所有元素的Java方法,java,arraylist,methods,iterator,Java,Arraylist,Methods,Iterator,我对这个很陌生,就这样吧 我有一个训练记录GUI,可以记录运动员的表现。 我正在努力编写findAllEntries方法。它应该遍历列表,并以字符串形式返回与特定日期、月份和年份匹配的所有元素(类似于lookupEntry,但我需要在一个字符串中显示所有元素??) 例如,当我运行代码时,它应该显示Bob和Alice条目,但它只显示Bob 不管我做什么,它只给我一个元素 所有的帮助将不胜感激 // An implementation of a Training Record as an Array

我对这个很陌生,就这样吧

我有一个训练记录GUI,可以记录运动员的表现。 我正在努力编写findAllEntries方法。它应该遍历列表,并以字符串形式返回与特定日期、月份和年份匹配的所有元素(类似于lookupEntry,但我需要在一个字符串中显示所有元素??)

例如,当我运行代码时,它应该显示Bob和Alice条目,但它只显示Bob

不管我做什么,它只给我一个元素

所有的帮助将不胜感激

// An implementation of a Training Record as an ArrayList

import java.util.*;

public class TrainingRecord {
    private List<Entry> tr;

    public TrainingRecord() {
        tr = new ArrayList<Entry>();
    } // constructor

    // add a record to the list
    public void addEntry(Entry e) {
        tr.add(e);
    } // addClass

    // look up the entry of a given day and month
    public String lookupEntry(int d, int m, int y) {
        ListIterator<Entry> iter = tr.listIterator();
        String result = "No entries found";
        while (iter.hasNext()) {
            Entry current = iter.next();
            if (current.getDay() == d && current.getMonth() == m && current.getYear() == y)
                result = current.getEntry();
        }
        return result;
    } // lookupEntry

    public String findAllEntries(int d, int m, int y) {

        // I am stuck here
        String result = "No entries found";
        return result;
    } // findAllEntries
}

如果有多个条目,我不确定您希望字符串包含什么,但是您基本上需要重复
while
循环,您已经在
lookupEntry
中完成了该循环。您可以通过在私有方法中隔离测试代码来清理代码,但仅此而已

此外,在大多数可用的Java版本中,您可以使用扩展的
for
语法来迭代
集合
类型,例如:

for (Entry current: tr) {
    if (current.getDay() == d && current.getMonth() == m && current.getYear() == y)
        ...
}
公共字符串查找条目(int d、int m、int y){
ListIterator iter=tr.ListIterator();
StringBuilder结果=新的StringBuilder(“”;//1
while(iter.hasNext()){
入口电流=iter.next();
如果(current.getDay()==d&¤t.getMonth()==m&¤t.getYear()==y)
result.append(current.getEntry()+);
}
//2
if(结果等于(“”){
结果。追加(“未找到实体”);
}
返回result.toString();
}//查找条目
  • 我们使用StringBuilder而不是字符串,这样它将占用更少的空间,并且每次找到新条目时都会追加字符串

  • 如果字符串为空,则为“未找到结果”


  • 你能试试这个而不是如果(current.getDay()==d&¤t.getMonth()==m&¤t.getYear()==y)result=result.concat(current.getEntry());如果这是您所期望的,那么结果字符串中将包含所有条目。谢谢您的回答。不幸的是,它仍然只返回第一个元素…嘿,谢谢你的回答。我试过了,但还是不起作用。我在GUI中添加了一些测试用例。因此,当我在122003中尝试此方法时,我希望它将Alice和Bob条目作为一个字符串返回?您能详细说明(在原始问题中)出现了什么问题,或者您对哪个部分有问题吗?从
    lookupEntry
    代码中可以明显看出,您确实知道如何迭代和查找条目。您遇到的问题是字符串连接吗?
    for (Entry current: tr) {
        if (current.getDay() == d && current.getMonth() == m && current.getYear() == y)
            ...
    }
    
    public String lookupEntry(int d, int m, int y) {
        ListIterator<Entry> iter = tr.listIterator();
        StringBuilder result=new StringBuilder(""); //1
        while (iter.hasNext()) {
            Entry current = iter.next();
            if (current.getDay() == d && current.getMonth() == m && current.getYear() == y)
                result.append(current.getEntry()+" ");
        }
       //2
        if(result.equals("")){
            result.append("No entires found");
        }
        return result.toString();
    } // lookupEntry