gpt4 book ai didi

java - 复制一个变量并添加到 Arraylist

转载 作者:行者123 更新时间:2023-11-29 08:07:48 25 4
gpt4 key购买 nike

我正在处理应该插入到 ArrayList 中的二维数组值。但这是在 for 循环中完成的,二维数组值的值随着循环运行而改变,因为它只是用作临时变量(这使得存储在 ArrayList 中的所有变量都被更改为这个变量改变了)。因此,如果我尝试在循环完成时打印出 ArrayList 的内容,所有值都是相同的。

    for(int i = 0; i <= Counter; i++)
{

if(Xhavetomove >= i)
arrayvalue[0][0] = this.Xspeed;
else
arrayvalue[0][0] = 0;

if(Yhavetomove >= i)
arrayvalue[0][1] = this.Xspeed;
else
arrayvalue[0][1] = 1;

System.out.println(arrayvalue[0][1]);
Object.movement.add(arrayvalue);
}

无论如何我可以让它自己存储值吗?

例如:循环第一次运行时值是“5,5”,但如果我在循环完成时打印出 ArrayList,所有值都变成了“5,1”。

最佳答案

这里的问题是 Array 添加到 Object 的方式。您没有将数组添加到对象。发生的事情是您将地址添加到数组所在的内存位置。因此,每次将数组添加到对象时,每次都会添加相同的地址。所以对象中的每个数组实际上都是同一个数组,因为它们都指向内存中的一个位置。因此,当您更改 Array 时,它似乎会更改 Object 中的所有内容。

最好的办法是每次循环都创建一个新数组,本质上是在内存中创建一个新位置供数组驻留,或者clone() 将创建一个数组新引用。

例子:

String[] houseOfStark = {"Eddard", "Catelyn", 
"Robb", "Sansa", "Arya", "Bran", "Rickon"}; // Sorry Jon
String[] copyOfStark = houseOfStark;
String[] cloneOfStark = houseOfStark.clone();

houseOfStark[1] = "Lady Catelyn";

System.out.println(houseOfStark[1]);
System.out.println(copyOfStark[1]);
System.out.println(cloneOfStark[1]);

将产生:

Lady Catelyn
Lady Catelyn
Catelyn

Good blog post explaining the difference

关于java - 复制一个变量并添加到 Arraylist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9942275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com