user1311286
user1311286

Reputation:

Java integer array, I cant do simple maths it seems

I have the code below:

int lines = 0;
while(lines < 2)
{
    int[] oldarr = parr;

    for(int i = 0; i < arrsize; i++)
        System.out.print(" " + oldarr[i]);
    System.out.println();

    for(int i = 0; i < arrsize; i++)
    {
        if(i == 0)
            parr[i] = 0;
        else
            parr[i] = Math.abs(oldarr[i] - oldarr[i-1]);
    }

    lines++;
}

parr is an array of integers of size [arrsize]. Each time through this loop I want to print the value of each index in parr, then set each index to the difference between the index before it and itself. Currently it gives me the correct (hardcoded) originally parr. But the next(first) iteration of changing parr gives me unexpected values; they are not even close to the difference between the two neighboring values..

Any ideas?

Upvotes: 0

Views: 89

Answers (2)

rgettman
rgettman

Reputation: 178263

In your second for loop, you are setting the new value to the difference of the current value and the previous value, but the previous value was already changed in the previous iteration of the for loop.

Change your second for loop iteration to iterate through the array backwards, so your calculations don't depend on previous calculations.

for(int i = arrsize - 1; i >= 0; i--)

Upvotes: 1

Keppil
Keppil

Reputation: 46219

You aren't copying your array with this line:

int[] oldarr = parr;

The two variables are still pointing at the same array.

To get a copy, you can do:

int[] oldarr = Arrays.copyOf(parr, parr.length);

Upvotes: 4

Related Questions