#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, поскольку они являются допустимыми записями, поэтому он просто добавляет ваш новый номер в массив.
Поэтому я бы предложил начать с пустого массива.