2012-02-15 25 views
4

Javaでは、特定のインデックスではなく次の宣言されていないインデックスに値を追加する方法はありますか?次のように言ってください:Java配列、次の空のインデックスに項目を追加

int[] negativeArray = new int[21]; 
int[] positiveArray = new int[21]; 

2つの異なるタイプのint(たとえば、負と正)の配列が2つあります。私はこれをループしています。スタックのようなものを動作させたいのです(私はスタックについてあまり気にしませんが、私の知る限り、インデックスを通らず、項目をポップ/プッシュするだけです)負の数の場合は、負の配列の次の宣言されていないインデックスの位置に数値を入れます。

私はいくつかの余分なコードでこれを行う方法を考えました。配列のすべての値を0に設定します。変数が負か正であるかどうかを確認するとき、配列を次の値0にループします。これには少しの努力が必要ですが、これを行う簡単な方法はありますか?


編集:基本アレイを使用せずにこれを行う方法はいくつかあります。私は...これが割り当てられていた、と私はそれのためにクレジットを取得するために、配列を使用するために必要なのです

Listがなされてきた理由である
+3

リストを使用できませんか? – assylias

+0

@assyliasオハイオ州私はそれらの1つを使用したことがない、私はそれを試してみましょう。しかし、問題は、私は学校の割り当てがあるので、配列を使用する必要があります。 – Gabe

+0

...またはjava.util.Stack? – aioobe

答えて

5

:単純にこのようなものを使用配列内のインデックス

int[] array = new int[21]; 
int nextIndex = 0; 

public void push(int e) { 
    array[nextIndex] = e; 
    ++nextIndex; 
} 

public int pop() { 
    --nextIndex; 
    return array[nextIndex]; 
} 

削除はどこにでも発生する可能性があれば、私はフリースポットを見つけるために、配列を反復処理よりもよりよい解決策が表示されません。

+0

@aarg簡単な解決策です^ _ ^大変ありがとうございます – Gabe

+0

[あなたがそれをポップした後のnextIndex]?それは漏れるだろうか?私はこの例がEffective Javaに現れると思います。私たちがpopメソッドにnextIndexで要素を無効にする何かを追加した方が良いでしょう。 – Random

+1

@Random:オブジェクトを格納している場合は正しいですが、配列からオブジェクトを削除しなければ、オブジェクトはガベージコレクションされません。これは、整数(および他のプリミティブ型)では問題ではありません。なぜなら、あなたが書き込む "null"(別名0)が同じ量のメモリを使用するからです。 – ARRG

2

。あなたが実際にスタックとして配列を使用している(したがって、唯一のスタックの一番上に項目を追加または削除します)なら、あなたは別の変数に次の空きを保つことができる

List<Integer> negativeIntegers = new ArrayList<Integer>(21); 
... 
negativeIntegers.add(-127); 
+0

私の質問をもう一度読んで編集しました – Gabe

0

それは基本的にARRGのソリューションとしてではなく、少ないコード行と同じことをhttp://docs.oracle.com/javase/6/docs/api/java/util/Stack.html

をチェックしてください:あなたは正の値を持つ配列と負のものを作成したい場合は

Stack<Integer> negative = new Stack<Integer>(); 
Stack<Integer> positive = new Stack<Integer>(); 

public void putMyNumber(int number) { 
    // Taking 0 as "positive" 
    if (number >= 0) { 
    positive.push(number); //Auto-boxing 
    return; 
    } 
    negative.push(number); 
} 
0

あなたが提案するアルゴリズムでそれを行うことができます:

public static void main(String[] args) throws Exception { 
    int[] negativeArray = new int[3]; 
    int[] positiveArray = new int[3]; 

    int[] test = new int[] {1, -1, 2, -2, 3, -3}; 

    int posIndex = 0; 
    int negIndex = 0; 

    for (int i = 0; i < test.length; i++) { 
     if (test[i] > 0) { 
      positiveArray[posIndex++] = test[i]; 
     } else if (test[i] < 0) { 
      negativeArray[negIndex++] = test[i]; 
     } 
    } 

    System.out.println(Arrays.toString(test)); //[1, -1, 2, -2, 3, -3] 
    System.out.println(Arrays.toString(positiveArray)); //[1, 2, 3] 
    System.out.println(Arrays.toString(negativeArray)); //[-1, -2, -3] 
} 
関連する問題