Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在LinkedList中仅更改一个值_Java - Fatal编程技术网

Java 如何在LinkedList中仅更改一个值

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();

我只想更改一个值,第二个值(它是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();
     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]]