Java 如何在LinkedList中仅更改一个值
我只想更改一个值,第二个值(它是int)例如+1。怎么做?我想为循环添加以下代码Java 如何在LinkedList中仅更改一个值,java,Java,我只想更改一个值,第二个值(它是int)例如+1。怎么做?我想为循环添加以下代码 LinkedList<Ter> smList = new LinkedList<Ter>(); smList.add(new Ter(2,4)); smList.add(new Ter(5,9)); smList.add(new Ter(6,5)); Iterator<Ter> iterator=smList.iterator();
LinkedList<Ter> smList = new LinkedList<Ter>();
smList.add(new Ter(2,4));
smList.add(new Ter(5,9));
smList.add(new Ter(6,5));
Iterator<Ter> iterator=smList.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
LinkedList smList=新建LinkedList();
增加(新的第(2,4)款);
增加(新的第(5,9)款);
增加(新的第(6,5)款);
迭代器迭代器=smList.Iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
您需要增加每个对象中的第二个值,并在迭代时将更新后的值设置为对象
按如下方式操作:
import java.util.Iterator;
import java.util.LinkedList;
class Ter {
int x, y;
public Ter(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
@Override
public String toString() {
return "Ter [x=" + x + ", y=" + y + "]";
}
}
public class Main {
public static void main(String[] args) {
LinkedList<Ter> smList = new LinkedList<Ter>();
smList.add(new Ter(2, 4));
smList.add(new Ter(5, 9));
smList.add(new Ter(6, 5));
Iterator<Ter> iterator = smList.iterator();
while (iterator.hasNext()) {
Ter ter = iterator.next();
ter.setY(ter.getY() + 1);
}
System.out.println(smList);
}
}
注意:
[Ter [x=2, y=5], Ter [x=5, y=10], Ter [x=6, y=6]]
如果要使用for
循环,而不是while
循环(如您在评论中所要求的),只需替换
while (iterator.hasNext())
与
在我的答案中。答案取决于Ter
类。如果它是可变的(允许修改自身),并且使构造函数的第二个参数的值可见,那么您将能够在循环中更新该字段。如果它是不可变的,但仍然为相应的字段提供了一个getter,那么可以在循环中用更新的第二个参数替换新的Ter对象
因此,让我们从一个可变的Ter
类开始:
public class Ter {
private int first = 0;
private int second = 0;
public Ter(int a, int b) {
first = a;
second = b;
}
public int getFirst() {
return first;
}
public void setFirst(int value) {
first = value;
}
public int getSecond() {
return second;
}
public void setSecond(int value) {
second = value;
}
@override
public String toString() {
return "Ter[" + first + ", " + second + "]";
}
}
现在,您可以这样编写主代码:
List<Ter> smList = new LinkedList<>();
smList.add(new Ter(2,4));
smList.add(new Ter(5,9));
smList.add(new Ter(6,5));
Iterator<Ter> iterator=smList.iterator();
while (iterator.hasNext()) {
Ter ter = iterator.next();
ter.setSecond(ter.getSecond() + 1);
System.out.println(ter);
}
输出:
[Ter[2, 5], Ter[5, 10], Ter[6, 6]]
当然,您可以使用索引变量迭代列表,并使用列表的get(index)
和set(index,value)
方法,但这对于LinkedList
来说并不有效
希望这有帮助 到目前为止,您尝试了什么?@CodeMatrix我尝试添加一个for循环,但不起作用。您的意思是要更改传递到构造函数中的第二个值吗?例如,是否要将第一个Ter对象的状态更改为新Ter(2,5),将第二个对象的状态更改为新Ter(5,10)?如果是这样,那么答案取决于Ter类的定义。您能提供Ter类的定义吗?@JulianWright是的,我想更改LinkedList中所有元素的第二个值,例如+1,我想更改为第二个值+1,而不是将第三个值添加到LinkedList中。添加(新Ter(2,4));将其更改为smList.add(新的Ter(2,5));以及LinkedList中第二个的所有位置value@ggame-我已经更新了答案。我希望它能满足你的要求。是的,我已经核对了答案。我的问题是如何使用for循环而不是while。@ggame-在我的回答中,将while(iterator.hasNext())
替换为for(;iterator.hasNext();)。只需替换它就行了,for(int a=0;aListIterator<Ter> listIterator = smList.listIterator();
while (listIterator.hasNext()) {
Ter ter = listIterator.next();
Ter newTer = new Ter(ter.getFirst(), ter.getSecond() + 1);
listIterator.set(newTer);
System.out.println(newTer);
}
[Ter[2, 5], Ter[5, 10], Ter[6, 6]]