Почему ArraysUtils.addElement работает не так, как должно быть?

#java #arrays #apache-commons

#java #массивы #apache-общий доступ

Вопрос:

У меня есть этот код, который запрашивает числа, а затем вводит их в массив, затем я должен отделить положительные, отрицательные и нулевые значения.

У меня возникли проблемы с созданием массива каждого типа.

Например, я запускаю код, ввожу 5 чисел (1,2,3,4,5), затем переходит к методу, который присваивает положительные значения positiveArray, отрицательные значения negativeArray и нули nulledArray.

Но когда я печатаю, например, positiveArray, добавляется только конечный индекс

введите описание изображения здесь

Я читал, что каждый раз, когда я вызываю ArrayUtils.add() , он должен помещать число в конец, но не так, как я получаю, это должно быть так:

 int[] numbers= new int[4];
numbers = ArrayUtils.add(numbers , 1);
numbers = ArrayUtils.add(numbers , 2);
numbers = ArrayUtils.add(numbers , 3);
numbers = ArrayUtils.add(numbers , 4);
 

числа = {1,2,3,4}

Или я ошибаюсь?

Я использую ApacheCommons

Спасибо


 import java.util.Arrays;

import javax.swing.JOptionPane;

import org.apache.commons.lang3.ArrayUtils;

public class das {

    private int cantidadElementos = 0;
    private int pos = 0, neg = 0, nulos = 0; //contadores de los números positivos y negativos
    private int[] numeros = new int[10]; //array que contendrá los números leídos por teclado
    private int[] numerosNegativos;
    private int[] numerosPositivos;
    private int[] numerosNulos;

    public static void main(String[] args) {
        das das = new das();
        das.agregarElementos();
        das.cantidadPositivos();

    }
public void agregarElementos(){
    int i = 0;
    for (i = 0; i < 10; i  ) {
        try {
            numeros[i] = (Integer.parseInt(JOptionPane.showInputDialog(null, "Introduce un valor", "Agregando elemento [" cantidadElementos "]", JOptionPane.QUESTION_MESSAGE)));
            if(numeros[i] > 0)
            {
                pos  ;          
            }
            else if (numeros[i] < 0)
            {
                neg  ;
            }
            else
            {
                nulos  ;
            }

            cantidadElementos  ;
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Has agregado " cantidadElementos " elementos.", "Información que cura", JOptionPane.INFORMATION_MESSAGE);
            return;
        }
    }

}


public void cantidadPositivos(){
    int i = 0;
    for(i = 0; i < cantidadElementos; i  )
    {
        if(numeros[i] >= 1)
        {
            numerosPositivos = new int[pos];
            numerosPositivos = ArrayUtils.add(numerosPositivos, numeros[i]);
            System.out.println(Arrays.toString(numerosPositivos));

        }
        else if (numeros[i] <=-1)
        {
            numerosNegativos = new int[neg];
            numerosNegativos = ArrayUtils.add(numerosNegativos, numeros[i]);
        }
        else
        {
            numerosNulos = new int[nulos];
            numerosNulos = ArrayUtils.add(numerosNulos, numeros[i]);
        }

    }
    JOptionPane.showMessageDialog(null, "De los [ " cantidadElementos  " ] elementos en el vector:nnPositivos: "  pos  "nnNegativos: "  neg  "nnNulos: "   nulos   "n", "Información que cura", JOptionPane.INFORMATION_MESSAGE, null);
}
}
 

Ответ №1:

Проблема в том, что вы воссоздаете новый массив на каждой итерации, например, в этой строке (in cantidadPositivos() ):

 numerosPositivos = new int[pos];
 

Вы должны определить эти массивы перед входом в цикл for .

 public void cantidadPositivos(){
    int i = 0;
    numerosPositivos = new int[pos];
    numerosNegativos = new int[neg];
    numerosNulos = new int[nulos];
    for(i = 0; i < cantidadElementos; i  )
    {
        if(numeros[i] >= 1)
        {
            numerosPositivos = ArrayUtils.add(numerosPositivos, numeros[i]);
            System.out.println(Arrays.toString(numerosPositivos));   
        }
        else if (numeros[i] <=-1)
        {
            numerosNegativos = ArrayUtils.add(numerosNegativos, numeros[i]);
        }
        else
        {
            numerosNulos = ArrayUtils.add(numerosNulos, numeros[i]);
        }

    }
    JOptionPane.showMessageDialog(null, "De los [ " cantidadElementos  " ] elementos en el vector:nnPositivos: "  pos  "nnNegativos: "  neg  "nnNulos: "   nulos   "n", "Información que cura", JOptionPane.INFORMATION_MESSAGE, null);
}
 

Ответ №2:

Когда вы используете new int[4], вы получаете массив типа [0, 0, 0, 0], поскольку int является примитивным, поэтому он не может быть нулевым.

ArrayUtil.add не заменяет эти значения 0, поскольку они являются допустимыми записями, поэтому он просто добавляет ваш новый номер в массив.

Поэтому я бы предложил начать с пустого массива.