Java 使用迭代器更改链表中的特定字段

Java 使用迭代器更改链表中的特定字段,java,Java,这是我的说明书上说的我最不需要做的事情 //ToDo 8-迭代剩余的鱼并更改所有数据 System.out.println(“显示设置器工作:\n”) 我不知道该怎么做,我试着测试链表的.set方法,但让我困惑的是,每个元素中都有多个字段,所以我不能只写fl.add(index,element)我只需要知道如何更改元素每个字段中的数据,然后我就可以生成另一个迭代器并完成其余的工作。这是我的密码 Fishdata类 public class FishData { private S

这是我的说明书上说的我最不需要做的事情 //ToDo 8-迭代剩余的鱼并更改所有数据 System.out.println(“显示设置器工作:\n”)

我不知道该怎么做,我试着测试链表的.set方法,但让我困惑的是,每个元素中都有多个字段,所以我不能只写fl.add(index,element)我只需要知道如何更改元素每个字段中的数据,然后我就可以生成另一个迭代器并完成其余的工作。这是我的密码

Fishdata类

    public class FishData {
    private String species;  //species of fish
    private int minSize;  //min size allowed in inches
    private String season;  //fishing season
    private int limit;  //number
    private Boolean willEat;
    //constructor
    FishData(String s1, int m, String s2, int I, Boolean w){
        species = s1;
        minSize = m;
        season = s2;
        limit = I;
        willEat = w;
    }
    public String toString(){
        return species + "" + minSize + "" + season + "" + limit + "" + willEat;
    }
    public String getSpecies(){
        return this.species;
    }
    public String getSeason(){
        return this.season;
    }
    public Boolean getWillEat(){
        return this.willEat;
    }
    public int getminSize() {
        return this.minSize;
    }
    public int getLimit() {
        return this.limit;
    }


    public void setSpecies(String species) {
        this.species = species;
    }
    public void setSeason(String season) {
        this.season = season;
    }
    public void setWillEat(Boolean willEat) {
        this.willEat = willEat;
    }
    public void setminSize(int minSize) {
        this.minSize = minSize;
    }
    public void setlimit(int limit) {
        this.limit = limit;
    }

}
主类

import java.util.Collections;
import java.util.LinkedList;
import java.util.Iterator;
public class GoneFishin {
    public static void main(String[] args) {
        //create linked list of fish data called fl
        LinkedList<FishData> fl = new LinkedList<FishData>();
        //Here are a few data items
        fl.add(new FishData("American Eel ", 9, "Summer/Spring ", 25, false));
        fl.add(new FishData("Hammerhead Shark ", 0, "All Year ", 36, false));
        fl.add(new FishData("Horseshoe Crab ", 7, "All Year except May ", 60, false));
        fl.add(new FishData("Haddock ", 18, "All Year ", 0, true));
        fl.add(new FishData("Tautog ", 16, "late Spring to end of year ", 3, true));

        for (FishData element : fl) {
            System.out.println(element);
        }
        System.out.print("SIZE OF LISTt: ");
        System.out.println(fl.size());

        System.out.print("SECOND ELEMENT IN LIST: ");
        System.out.println(fl.get(1));

        System.out.print("LAST ELEMENT IN LIST: ");
        System.out.println(fl.getLast());

        Iterator<FishData> itr2 = fl.iterator();

        System.out.println("PRINTING ALL ELEMENTS USING ITERATOR");
        while (itr2.hasNext()) {
            System.out.println(itr2.next());
        }
        Iterator<FishData> itr = fl.iterator();
        while (itr.hasNext()) {
            FishData b = (FishData) itr.next();
            if (b.getWillEat()== false) {
                itr.remove();
            }
        }
        System.out.println("FISH THAT ARE GOOD TO EAT");
        for (FishData element : fl) {
            System.out.println(element);
        }
     fl.set(1,"Shrekfish", 19, "whenever it wants", 7, false);


 }
}
import java.util.Collections;
导入java.util.LinkedList;
导入java.util.Iterator;
公共类GoneFishin{
公共静态void main(字符串[]args){
//创建名为fl的鱼类数据链接列表
LinkedList fl=新建LinkedList();
//下面是一些数据项
fl.add(新渔业数据(“美国鳗鱼”,9,“夏季/春季”,25,假));
fl.add(新渔业数据(“锤头鲨”,0,“全年”,36,假));
fl.add(新渔业数据(“马蹄蟹”,7,“除5月外的所有年份”,60,假));
fl.add(新渔业数据(“黑线鳕”,18,“全年”,0,真));
fl.add(新的渔业数据(“Tautog”,16,“晚春至年底”,3,真实数据));
用于(数据元素:fl){
系统输出打印项次(元素);
}
系统输出打印(“列表大小:”);
System.out.println(fl.size());
System.out.print(“列表中的第二个元素:”);
System.out.println(fl.get(1));
System.out.print(“列表中的最后一个元素:”);
System.out.println(fl.getLast());
迭代器itr2=fl.Iterator();
System.out.println(“使用迭代器打印所有元素”);
while(itr2.hasNext()){
System.out.println(itr2.next());
}
迭代器itr=fl.Iterator();
while(itr.hasNext()){
FishData b=(FishData)itr.next();
if(b.getWillEat()==false){
itr.remove();
}
}
System.out.println(“好吃的鱼”);
用于(数据元素:fl){
系统输出打印项次(元素);
}
fl.set(1,“泼妇鱼”,19,“想什么时候就什么时候”,7,错);
}
}

我知道最后的fl.set不工作,它给了我一个错误,我只是想弄清楚它是如何工作的,所以我正在测试它。

你需要将它改为

fl.set(1, new FishData("Shrekfish", 19, "whenever it wants", 7, false));
*如果我没弄错你的问题。这将用新对象替换索引
1
处的元素

如果您只想更新单个元素,那么

for (FishData element : fl) {
    element.setminSize (28);  // or whatever
    System.out.println(element);
}
在通过删除某些鱼来减少
fl
(这是一个链表)之后,任务似乎是迭代任何剩余的鱼,并对它们调用setter。比如说:

for (FishData element : fl) {
  element.setSeason("Winter, Summer, Spring, or Fall");
}

如果我理解了这个问题,我们的想法是更新每个剩余元素的值。

对剩余的fish进行迭代,您将得到一个
FishData
,就像您在测试
b.getWillEat()时所做的那样。然后,对于每个
b
调用a
.getX()
而不是调用a
.setX(val)
。您不是在
LinkedList
上调用集合,而是在列表的每个元素上调用集合。如果我没弄错你的问题。