Java数组,将项添加到下一个空索引中

时间:2012-02-15 16:02:46

标签: java arrays iteration

在Java中,有没有办法添加不在特定索引处的值,而是添加到下一个未声明的索引?说:

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

两种不同类型的整数有两个数组,例如负数和正数。我正在循环这个,我希望它能像堆栈一样工作(我不太了解堆栈,但据我所知,你没有通过它的索引,你只是将项目弹出/推送到它上面)如果它是负数,则在负数组中的下一个未声明的索引点中输入数字。

我想到了一些使用额外代码执行此操作的方法。我将数组中的所有值都设置为0.当检查变量是负数还是正数时,我会将数组循环到下一个0值。一旦找到它,我就知道我在使用什么索引。这需要一点努力,有没有更简单的方法呢?


编辑:有些评论指出了不使用基本数组的不同方法。我被分配了这个,我需要使用一个数组来获得它的信任...

4 个答案:

答案 0 :(得分:6)

如果您实际上将数组用作堆栈(因此,只会添加或删除堆栈顶部的项目),那么您可以在另一个变量中保留数组中的下一个空闲索引。

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

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

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

如果删除可以在任何地方发生,那么我没有看到比迭代数组找到一个更好的解决方案。

答案 1 :(得分:2)

这就是List的原因。只需使用以下内容:

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

答案 2 :(得分:0)

查看http://docs.oracle.com/javase/6/docs/api/java/util/Stack.html

它与ARRG的解决方案基本相同,但代码行数较少:

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);
}

答案 3 :(得分: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]
}
相关问题