2016-10-14 2 views
-1

J'ai ce code qui demande des nombres et puis les introduit dans un tableau, puis, je dois séparer les positifs, les négatifs et les nulls.Pourquoi ArraysUtils.addElement ne fonctionne pas comme il se doit?

J'ai des problèmes avec la création de la matrice de chaque type.

Par exemple, je commence le code, j'introduis 5 nombres (1,2,3,4,5), puis je passe à la méthode qui assigne les positifs au positifArray, les négatifs au negatifArray et les nulls au nulledArray .

Mais quand j'imprimer, par exemple, positiveArray, ne fait qu'ajouter à l'indice final

enter image description here

Je lis que chaque fois que j'appelle ArrayUtils.add(), il devrait être de placer le numéro à la fin , mais pas ce que je reçois, cela devrait ressembler à ceci:

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); 

chiffres = {1,2,3,4}

Ou je me trompe?

J'utilise

Apache Commons

Merci


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); 
} 
} 

Répondre

2

Le problème est que vous recréez un nouveau tableau à chaque itération, comme cette ligne (en cantidadPositivos()):

numerosPositivos = new int[pos]; 

Vous devez définir ces tableaux avant d'entrer dans le cycle.

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); 
} 
0

Lorsque vous utilisez new int [4] vous obtenez un tableau comme [0, 0, 0, 0] car int est primitive ne peut donc pas être nulle. ArrayUtil.add ne remplace pas ces valeurs 0, car ce sont des entrées valides, il suffit donc d'ajouter votre nouveau numéro au tableau.

Donc, je suggère de commencer avec un tableau vide.