0

我有以下代码:

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 是大小为 [arrsize] 的整数数组。每次通过此循环时,我都想打印 parr 中每个索引的值,然后将每个索引设置为它之前的索引与其自身之间的差异。目前它给了我正确的(硬编码)最初的parr。但是改变 parr 的下一次(第一次)迭代给了我意想不到的值;它们甚至不接近两个相邻值之间的差异..

有任何想法吗?

4

2 回答 2

4

你不是用这一行复制你的数组:

int[] oldarr = parr;

这两个变量仍然指向同一个数组。

要获取副本,您可以执行以下操作:

int[] oldarr = Arrays.copyOf(parr, parr.length);
于 2013-04-23T21:21:40.107 回答
1

在您的第二个for循环中,您将新值设置为当前值和前一个值的差值,但前一个值在for循环的前一次迭代中已经更改。

更改您的第二次for循环迭代以向后迭代数组,因此您的计算不依赖于先前的计算。

for(int i = arrsize - 1; i >= 0; i--)
于 2013-04-23T21:21:56.743 回答