Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.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 一个数组中的所有对象都会不断得到";更新的「;当我添加新对象时_Java_Android_Arrays - Fatal编程技术网

Java 一个数组中的所有对象都会不断得到";更新的「;当我添加新对象时

Java 一个数组中的所有对象都会不断得到";更新的「;当我添加新对象时,java,android,arrays,Java,Android,Arrays,我真的不想在网上问这个问题,但我自己也弄不明白 我正在编写一个Android应用程序来跟踪一些卡丁车耐力赛的策略(管理司机的变化) 对于每个Stint对象(=两个驱动程序更改之间的比赛部分),我设置一个驱动程序对象和开始时间(整数[2]。索引0是小时,索引1是分钟)。 每一个任务都将放入一个任务数组中 创建一个新的Stint对象(并将其放入数组的下一个位置)后,我转到数组的上一个元素,将其结束时间设置为(新对象的)开始时间,这是新Stint的构造函数参数。因此,新工作的开始时间=旧工作的结束时间

我真的不想在网上问这个问题,但我自己也弄不明白

我正在编写一个Android应用程序来跟踪一些卡丁车耐力赛的策略(管理司机的变化)

对于每个Stint对象(=两个驱动程序更改之间的比赛部分),我设置一个驱动程序对象和开始时间(整数[2]。索引0是小时,索引1是分钟)。 每一个任务都将放入一个任务数组中

创建一个新的Stint对象(并将其放入数组的下一个位置)后,我转到数组的上一个元素,将其结束时间设置为(新对象的)开始时间,这是新Stint的构造函数参数。因此,新工作的开始时间=旧工作的结束时间。有道理,对吧?我需要这个来计算持续时间

但问题是: 每次我创建新的Stint对象时,以前对象的所有开始时间都将覆盖到新时间。因此,当第一段在10:00开始,第二段在10:35开始时,第一段的开始时间突然也是10:35

我认为这是一种基于参考的问题,但我不理解。我传递给新的Stint对象的驱动程序对象将不会更改-仅更改开始时间

这是第一阶段(=比赛开始)的方法。 pickedTime来自Android时间选择器对话框。 cDI-->currentDriverIndex 此时stintIndex为0

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

}