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