Why all elements of my list seems to be the same?

前端 未结 2 679
忘了有多久
忘了有多久 2021-01-22 09:53

I have the following code:

Integer[] lastExchange = new Integer[nColors];
Integer[] newExchange = new Integer[nColors];
while (true) {
    ...
    for (int i=0;          


        
相关标签:
2条回答
  • 2021-01-22 10:01

    As unwind's answer states, you're adding a reference to the same array in every iteration of the loop. You need to create a new array each time:

    // It's not clear where newExchange is actually populated
    Integer[] newExchange = new Integer[nColors];
    while (true) {
        Integer[] lastExchange = new Integer[nColors];
        ...
        for (int i=0; i<nColors; i++) {
           lastExchange[i] = newExchange[i];
        }
        ...
        exchanges.add(lastExchange);
        output.log.fine("Exchange:" + lastExchange[0] + "," + lastExchange[1]);
    }
    

    Alternatively, if you're just cloning the array:

    Integer[] newExchange = new Integer[nColors];
    while (true) {
        Integer[] lastExchange = newExchange.clone();
        ...
        exchanges.add(lastExchange);
        output.log.fine("Exchange:" + lastExchange[0] + "," + lastExchange[1]);
    }
    
    0 讨论(0)
  • 2021-01-22 10:15

    What is the type of lastExchange? If it's a reference to an object, the the problem is probably exactly that; you just add the same reference to a mutable object, which is then modified and added again.

    Since the first loop prints the object before it (presumably) is modified, it prints the proper (different) values.

    0 讨论(0)
提交回复
热议问题