1
class Main {
    public static void main(String[] args) {
        int x = 3;
        int [] a = new int [x];
        x+=5;
        System.out.println((x+=5));
        System.out.println(a.length);
    }
}

配列 "a" の長さに影響しないのはなぜですか? 私は何を間違っていますか?

問題は、ループを使用して配列の長さに 5 を追加するように求められたことです。長さを直接伸ばすことさえできません。それは簡単な問題のように見えますが、私はまだ学習過程にあります。昨日やったけど覚えてない。

4

5 に答える 5

6

x の値を変更するだけです。配列の長さを変更するには、この値を再割り当てする必要もあります。

        int x = 3;
        int[] a = new int[x];
        x += 5;
        a = new int[x];
        System.out.println(a.length);
于 2013-10-13T10:54:50.380 に答える
1

わかりました、より完全な答えを与えるために要約します:

まず、配列を初期化するときに、定義済み/有限のメモリ チャンクを配列に割り当てます。Java でこのような配列の長さを変更する場合は、新しい配列を初期化する必要があります。Java には、配列のレトロスペクティブな自動再初期化はありません。他の言語は似たようなことをするかもしれませんが、Java はそうではありません。

次に、配列の初期化に値を渡しxます。つまり、配列を作成する機能は値を受け取りますが、メモリアドレスは受け取りません。Java のメソッドも同様です。値をパラメーターとして渡しますが、各メソッドのローカル環境で明示的に参照しない限り、変数を直接見ることはできません。これが、パラメーターを受け入れる関数が、値が渡された変数の変更によって直接影響を受けない理由です。

第 3 に、配列のサイズを頻繁に変更しようとする場合は、探している機能を含むArrayLists の使用を検討する必要があります。

第 4 に、他の代わりに配列を使用し続け、配列のメンバー/値を保持したい場合でも、古い配列の内容を新しい初期化された配列に渡す必要があります。これは、古い配列をループすることで実現できます。

于 2013-10-13T11:17:42.553 に答える
1

x の値を変更するだけでは役に立ちません。

変更された値を配列に明示的に割り当てる必要があります

于 2013-10-13T10:57:32.623 に答える
0

まず第一に、あなたは何を達成しようとしていますか?の長さは、配列の作成中 (コードの 2 行目) の x 値と等しくなります。動的配列を使用する場合は、使用を検討する必要がありますjava.util.ArrayList

于 2013-10-13T10:58:05.153 に答える