我有这个代码要求数字,然后将它们引入数组,然后,我必须将正数,负数和空值分开。
我在创建每种类型的数组时遇到了麻烦。
例如,我启动代码,我引入了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);
numbers = {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:\n\nPositivos: "+ pos +"\n\nNegativos: "+ neg +"\n\nNulos: " + nulos + "\n", "Información que cura", JOptionPane.INFORMATION_MESSAGE, null);
}
}
答案 0 :(得分:2)
问题是你在每次迭代时重新创建一个新数组,就像这一行一样(在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:\n\nPositivos: "+ pos +"\n\nNegativos: "+ neg +"\n\nNulos: " + nulos + "\n", "Información que cura", JOptionPane.INFORMATION_MESSAGE, null);
}
答案 1 :(得分:0)
当你使用new int [4]时,你得到一个像[0,0,0,0]这样的数组,因为int是原始的,所以它不能为空。
ArrayUtil.add不会替换那些0值,因为它们是有效的条目,所以它只是将新的数字附加到数组中。
所以我建议从一个空数组开始。