2012-02-15 74 views
4

在Java中,有没有一种方法可以将值不是添加到特定索引,而是添加到下一个未声明的索引?说:Java数组,将项添加到下一个空索引

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

有两个阵列为两个不同类型的整数,例如负值和正值。我正在循环阅读,我希望它像堆栈一样工作(我不太了解堆栈,但据我所知,你不会浏览它的索引,只需将它们弹出/推送到它)如果其为负数,则将该数字放入负数组中的下一个未声明的索引点中。

我想到一种方法来做到这一点与一些额外的代码。我将数组中的所有值都设置为0.当检查变量是否为正值时,我将循环访问下一个为0的值。一旦找到它,我就知道我在找什么索引。这需要一点点努力,有没有更简单的方法来做到这一点?


编辑:有些评论指出不使用基本数组的方式。我被分配了这个,并且我被要求使用一个数组来获得功劳...

+3

你不能使用列表吗? – assylias 2012-02-15 16:05:02

+0

@assylias哦我从来没有使用过其中之一,我会尝试一下。但事情是,我需要使用一个数组,因为它是一个学校任务。 – Gabe 2012-02-15 16:05:46

+0

...或java.util.Stack? – aioobe 2012-02-15 16:05:52

回答

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 2012-02-15 16:08:32

+0

元素在[ nextIndex]后,你呢?会泄漏吗?我认为这个例子出现在Effective Java中。如果我们在pop方法中添加某些东西以使nextIndex中的元素无效,那么更好。 – Random 2012-02-15 16:39:00

+1

@Random:在我们存储对象的情况下,如果我们没有将它从数组中移除,对象将不会被垃圾收集。这对于整数(以及其他基本类型)来说不是问题,但是因为您要写入的“null”(aka 0)取而代之的是相同数量的内存。 – ARRG 2012-02-15 16:52:23

2

这就是为什么List已经被创建。只需使用这样的事情:

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

再次阅读我的问题,我编辑了它 – Gabe 2012-02-15 16:07:40

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