0

StackOverflowの皆さん、こんにちは!私はsearrchオプションを使用しましたが、いくつかの関連する答えを見つけましたが、Javaで配列を逆順にするこの特定の方法が機能しない理由を説明したものはありませんでした。

class ReverseOrder
{
    public static void main(String[] args)
    {
        int x[] = {1,2,3,4,5};
        int y[] = x;

        int i, j;
        for(i = 0, j = x.length - 1; i < x.length; i++, j--)
        {
            y[i] = x[j];
        }

        for(int b = 0; b < x.length; b++)
        {
            System.out.println("Inverse order is: " + y[b]);
        }
    }
}

結果が5,4,3,2,1ではなく5,4,3,4,5になるのはなぜですか?それは私を完全に狂気に駆り立て、私には意味がありません。どんな助けでも大歓迎です!

4

4 に答える 4

7

このため:int y [] = x

yとxは同じ配列への参照になりました。yを新しい配列として初期化することを確認する必要があります。

于 2012-06-26T17:31:49.020 に答える
2
class ReverseOrder {
    public static void main(String[] args)
    {

        int x[] = {1,2,3,4,5};
        int y[] = new int[5]; // or you could use [x.length]
        int i, j;
        for(i = 0, j = x.length - 1; i < x.length; i++, j--)
        {
            y[i] = x[j];
        }

        for(int b = 0; b < x.length; b++)
        {
            System.out.println("Inverse order is: " + y[b]);
        }
    }
}
于 2012-06-26T17:47:18.220 に答える
1
int y[] = x;

yがxと同じデータを参照するようにします。

y[i] = x[j];

入力配列xも変更しています。

yを完全に独立させたい:

int y[] = new int[x.length];

代わりは。

于 2012-06-26T17:33:18.973 に答える
1

配列要素の順序を逆にしたい場合(つまり、配列xを直接変更したい場合)、配列の途中で要素を交換して繰り返すことができます。

final int last = x.length - 1;
final int n_2 = x.length / 2; // round down for odd lengths
for (int i = 0; i < n_2; ++i) {
    int tmp = x[i];
    x[i] = x[last - i];
    x[last - i] = tmp;
}
于 2012-06-26T17:41:33.847 に答える