-2

私はJavaを練習しており、配列に取り組んでいます。配列のサイズは実行時に変更できないため、2 つの配列を作成し、実行時に最初の配列に入力を格納し続け、それがいっぱいになったら、if ステートメントで 2 番目の配列に移動することは可能ですか。私は Java が基本なので、私のコードが正しい方向に進んでいることを願っています。とにかくうまくいきませんが、自分のアイデアを共有して、うまくいくかどうかを確認したいだけです。

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner in = new Scanner(System.in);

    int[] arr1 = new int[5];
    int[] arr2 = new int[10];

    while(in.hasNextInt())
    {
        for(int i = 0; i <= arr2.length; i++)
        {
            if (i <= arr1.length) { arr1[i] = in.nextInt(); }
            else arr2[i] = in.nextInt();
        }
    }

}
4

3 に答える 3

1

コードを次のように変更する必要があります。

if (i < arr1.length) { arr1[i] = in.nextInt(); } //"<" instead of "<="
else { arr2[i - arr1.length] = in.nextInt(); } //decrement i by the size of the first Array

他の回答/回答に示されているように、達成しようとしていることを実行するためのより実用的な方法はたくさんありますが、上記の方法でコードが意図したとおりに機能するはずです。

于 2013-07-06T22:52:44.557 に答える
1

これは良い考えではありません。2 番目の配列がいっぱいになると、例外やデータの損失などの問題が発生します。

を使用することをお勧めしArrayListます。

次の方法で作成できます。

ArrayList<Integer> list=new ArrayList<>();

そしてそれに追加します:

list.add(new Integer(in.nextInt()));

オートボクシングを使用すると、整数参照オブジェクトの作成をスキップして、次を使用できます。

list.add(in.nextInt());
于 2013-07-06T22:52:57.760 に答える
0

とにかくうまくいかない…

ええ。かなり明らかに。

...しかし、私のアイデアを共有して、それが機能するかどうかを確認したいだけです。

いいえ、明らかに。

確かに、最初の配列のときに 2 番目の配列に要素を入れることができます。しかし、2 番目のアレイがいっぱいになると、同じ問題が再び発生します。


最善の解決策は、ArrayList<Integer>(... または任意の種類のList<Integer>) を使用することです。これにより、リストを透過的かつ自動的に「成長」させるという問題が解決されます。

配列でこれを行うことを主張する場合、解決策は次のとおりです。

  1. 「現在の」配列よりも大きい「新しい」配列を動的に割り当てます。
  2. 「現在の」配列の要素を「新しい」配列にコピーし、
  3. 「新しい」配列の参照を「現在の」配列変数に割り当てます。

実際、これらすべてを を使用して行うことができますArrays.copyOf(int[], int)

于 2013-07-07T13:02:56.990 に答える