Java 一个数组中的所有对象都会不断得到";更新的「;当我添加新对象时
我真的不想在网上问这个问题,但我自己也弄不明白 我正在编写一个Android应用程序来跟踪一些卡丁车耐力赛的策略(管理司机的变化) 对于每个Stint对象(=两个驱动程序更改之间的比赛部分),我设置一个驱动程序对象和开始时间(整数[2]。索引0是小时,索引1是分钟)。 每一个任务都将放入一个任务数组中 创建一个新的Stint对象(并将其放入数组的下一个位置)后,我转到数组的上一个元素,将其结束时间设置为(新对象的)开始时间,这是新Stint的构造函数参数。因此,新工作的开始时间=旧工作的结束时间。有道理,对吧?我需要这个来计算持续时间 但问题是: 每次我创建新的Stint对象时,以前对象的所有开始时间都将覆盖到新时间。因此,当第一段在10:00开始,第二段在10:35开始时,第一段的开始时间突然也是10:35 我认为这是一种基于参考的问题,但我不理解。我传递给新的Stint对象的驱动程序对象将不会更改-仅更改开始时间 这是第一阶段(=比赛开始)的方法。 pickedTime来自Android时间选择器对话框。 cDI-->currentDriverIndex 此时stintIndex为0Java 一个数组中的所有对象都会不断得到";更新的「;当我添加新对象时,java,android,arrays,Java,Android,Arrays,我真的不想在网上问这个问题,但我自己也弄不明白 我正在编写一个Android应用程序来跟踪一些卡丁车耐力赛的策略(管理司机的变化) 对于每个Stint对象(=两个驱动程序更改之间的比赛部分),我设置一个驱动程序对象和开始时间(整数[2]。索引0是小时,索引1是分钟)。 每一个任务都将放入一个任务数组中 创建一个新的Stint对象(并将其放入数组的下一个位置)后,我转到数组的上一个元素,将其结束时间设置为(新对象的)开始时间,这是新Stint的构造函数参数。因此,新工作的开始时间=旧工作的结束时间
public void createFirstStint(String driver, Integer[] pickedTime) {
for (int i = 0; i < AMOUNTOFDRIVERS; i++) {
if (driver.equalsIgnoreCase(driverArray[i].getName()))
this.cDI = i;
}
driverArray[cDI].setDriving(true);
driverOverviewArray[cDI].setTextColor(Color.GREEN);
Stint stint = new Stint(driverArray[cDI], pickedTime);
stintArray[stintIndex] = stint;
}
public void createFirstStint(字符串驱动程序,整数[]pickedTime){
对于(int i=0;i
这是每隔一段时间的方法。基本相同。
pDI-->以前的驱动器索引。
在这里,我创建了一个新的Stint对象,并将其放入数组的下一个位置(stintIndex++)。
之后,我转到上一个数组元素[stintIndex-1]并设置结束时间。这可以工作,但开始时间也将被覆盖
private void createRegularStint(String driver, Integer[] pickedTime) {
stintIndex++;
pDI = cDI;
for (int i = 0; i < AMOUNTOFDRIVERS; i++) {
if (driver.equalsIgnoreCase(driverArray[i].getName()))
this.cDI = i;
}
driverArray[pDI].setDriving(false);
driverArray[cDI].setDriving(true);
Stint stint = new Stint(driverArray[cDI], pickedTime);
stintArray[stintIndex] = stint;
stintArray[stintIndex - 1].setEnd(pickedTime, savePrevStintStartTime); // Sets
// also
// the
// calculated duration
int durationOfLastStint = stintArray[stintIndex - 1]
.getDurationMinutes();
driverArray[pDI].setTimeDriven(durationOfLastStint);
race.addRaceTime(durationOfLastStint);
updateCards();
String s = "";
for (int i = 0; i <= stintIndex; i++) {
s += "Stint " + i + "| Start: "
+ timeMaker(stintArray[i].getStart()) + " Ende: "
+ timeMaker(stintArray[i].getEnd()) + " Fahrer: "
+ stintArray[i].getDriver().getName() + "\n";
}
private void createRegularStint(字符串驱动程序,整数[]pickedTime){
stintIndex++;
pDI=cDI;
对于(int i=0;i 对于(int i=0;i复制Stint构造函数中的时间
public class Stint {
private Integer[] start;
public Stint(Driver driver, Integer[] start) {
this.start = Arrays.copyOf[start, start.length];
// ...
}
}
所以我猜下面的部分也错了
private void createRaceAndDriverObjects() {
for (int i = 0; i < AMOUNTOFDRIVERS; i++) {
Driver driver = new Driver(driverNamesArray[i], RACEDURATION);
driverArray[i] = driver;
}
for (int i = 0; i < stintArray.length; i++) {
Stint stint = new Stint();
stintArray[i] = stint;
}
this.race = new Race(driverArray, RACEDURATION);
}
private void createRaceAndDriverObjects(){
对于(int i=0;i
这意味着驱动程序对象在整个过程中都是相同的。您并没有像自己认为的那样添加新对象。因为它是相同的对象…欢迎使用java编程。您将相同的对象引用分配给数组中的每个元素。这意味着数组中的每个元素都“指向”到同一个对象。谢谢你们。但我如何确保只创建所需数量的对象。它可以是4个,也可以是7个!在比赛开始时我不知道。当然我可以在开始时创建对象1-10,但我认为这不是很“干净”。还有,为什么正确的驾驶员对象仍然链接到“不同”的物体。实际上这个力不会改变任何东西:-(它应该做什么?
private void createRaceAndDriverObjects() {
for (int i = 0; i < AMOUNTOFDRIVERS; i++) {
Driver driver = new Driver(driverNamesArray[i], RACEDURATION);
driverArray[i] = driver;
}
for (int i = 0; i < stintArray.length; i++) {
Stint stint = new Stint();
stintArray[i] = stint;
}
this.race = new Race(driverArray, RACEDURATION);
}