声明数组长度,JAVA

时间:2016-11-18 14:49:03

标签: java arrays if-statement for-loop

我必须从现有的两个新数组生成一个,一个将具有正值,一个负数,不包括0.如果这个逻辑是正确的,我只有一个问题,声明这两个数组的长度,新数组。我是编程的初学者。

public static void main(String[] args) {
    int[] array = {12, 23, -22, 0, 43, 545, -4, -55, 43, 12, 0, -999, -87};
    int[] array1 = new int [];
    int[] array2 = new int [];
    for(int i=0; i<array.length; i++) {
    if(array[i]>0) {
        if(array[i]==0)
            continue;
        int[] array1 = new int[];

        array1[i]=array[i];
    } else if(array[i]<0) {
        if(array[i]==0)
            continue;

        array2[i]=array[i];
    }
}

2 个答案:

答案 0 :(得分:4)

如果您使用Java 8,则可以执行

int[] array = new int[]{12, 23, -22, 0, 43, 545, -4, -55, 43, 12, 0, -999, -87};

int[] positives = Arrays.stream(array).filter(x -> x > 0).toArray();
int[] negatives = Arrays.stream(array).filter(x -> x < 0).toArray();

答案 1 :(得分:1)

您需要更改算法以在两次传递中执行此操作,如下所示:

  • 浏览数组一次,并计算每个子数组中最终会有多少项
  • 使用在第一步中获得的计数实例化数组
  • 再次浏览数组,并填充结果。

实现此目的时,此代码使用array1array2的错误索引的节点:

array1[i] = array[i];
array2[i] = array[i];

每一方都需要两个单独的索引:

array1[positiveIndex++] = array[i];
array2[negativeIndex++] = array[i];

或者,如果您的练习允许,您可以使用可以在向其添加项目时增长的集合(例如ArrayList<Integer>)。这种方法要简单得多,因为它只需要一次通过。