2016-11-18 4 views
2

Мне нужно создать два новых массива из этого существующего, один будет иметь положительные значения и один отрицательный, не включая 0. Если эта логика правильная, у меня есть только одна проблема, объявив длину эти два новых массива. Я новичок в программировании.Объявление длины массива, JAVA

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]; 
    } 
} 
+0

Проверка 'если (массив [я] == 0)' 'внутри, если (массив [я]> 0)' блок, ДАЕТ НИКАКИХ смысл. – Berger

+0

Ваш код не компилируется, вы должны сначала объявить размер массива. Вы должны перебирать «массив» и подсчитывать количество положительных и отрицательных элементов. Затем создайте экземпляр 'array1' и' array2' с заданным размером – BrunoDM

+0

ok, я попробую это, ty! – SeeSee

ответ

1

Вы должны изменить свой алгоритм, чтобы сделать это в два прохода, как это:

  • Пройдите через массив один раз, и подсчитать, сколько элементов будет в конечном итоге в каждой подрешетке
  • Мгновентируйте массивы с подсчетами, полученными на первом этапе
  • Пройдите массив снова и заполните результаты.

При реализации этого узла, что этот код использует неправильный индекс для array1 и array2:

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

Вам понадобятся два отдельных индексов для каждой стороны:

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

В качестве альтернативы, вы могли бы используйте коллекцию, которая может расти при добавлении к ней предметов (например, ArrayList<Integer>), если это позволяет ваше упражнение. Этот подход намного проще, потому что он требует только одного прохода.

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(); 
+0

Мне нужно использовать циклы, потому что это то, чему мы сейчас учимся, это мое задание, массивы и циклы pratctice. :/ – SeeSee

+0

Затем вам нужно сделать, как объяснил dasblinkenlight –