JAVA - Tableau

Fermé
JavaNoob - 26 nov. 2008 à 22:07
 Sims' - 1 déc. 2008 à 11:24
Bonjour, j'ai un tableau avec plusieur chiffres, et je doit mettre les négatifs dans un tableau(tabNeg) et les positifs dans un autre(TabPos)

Quand jexecute, tout les chiffres des 2 tableaux sont 0, apart le dernier. j'aimerai savoir pourquoi jobtient des 0 et pas les vrai valeures. voici le code

static void traiterTableau(int tab[])
{
int[] tabNeg = null;
int[] tabPos = null;

int nbNeg=0;
int nbPos=0;

for(int i=0; i<tab.length; i++)
{

if (tab[i]<0)
{
nbNeg++;
tabNeg= new int[nbNeg];
tabNeg[nbNeg-1]=tab[i];

}
else if (tab[i]>0)
{
nbPos++;
tabPos= new int[nbPos];
tabPos[nbPos-1]=tab[i];

}
}


Merci.
A voir également:

1 réponse

Hello,

J'ai regardé ton code, et il faut que je t'avoue que je comprend pas pkoi l'initialisation de tes tabNeg et tabPos se fait dans ta boucle for? La conséquence de cela, c que tu auras un tableau vide et dans laquelle tu affecte une valeur dans la dernière cellule.

Voici une correction qui devrait t'aider :

static void traiterTableau(int tab[]) 
{ 
    int[] tabNeg = new int[tab.length];  
    int[] tabPos = new int[tab.length]; 

    int nbNeg=0; 
    int nbPos=0; 

    for(int i=0; i<tab.length; i++) 
    { 

    if (tab[i]<0) 
    { 
        tabNeg[nbNeg]=tab[i]; 
        nbNeg++;
    } 
    else if (tab[i]>0) 
    { 
        tabPos[nbPos-1]=tab[i];
        nbPos++;
    } 
} 
0
Petite correction, remplacer tabPos[nbPos-1]=tab[i]; par tabPos[nbPos]=tab[i];
0
JavaNoob > Sims'
27 nov. 2008 à 18:56
merci sa marche mais j'ai juste un petit problème c'est que la longneur des tabNeg et tabPos est égal à la longeure du tableau initial, donc après avoir affiché les chiffres négatifs dans tabNeg(ou les positifs dans tabPos), elle affiche des 0 pour le reste des places dans le tableau. Donc la longeur du tabNeg doit être égale à nbNeg, ce que je n'arrive pas a faire. Merci pour l'aide
0
JavaNoob > Sims'
27 nov. 2008 à 19:26
j'ai réussit à le faire met en mettant une deuxieme boucle, mais jaimerai savoir si c'est possible de le faire dans une seule boucle, voici ce que j'ai fait.

static void traiterTableau(int tab[]) 
		{ 
		   int[] tabNeg; 
		   int[] tabPos;

		    int nbNeg=0; 
		    int nbPos=0; 

		 for(int i=0; i<tab.length; i++) //boucle qui détermine le nombre de négatifs et de positifs
		  { 
		    if (tab[i]<0) 
		    { 
		        nbNeg++;
		    } 
		    else if (tab[i]>0) 
		    { 
		        nbPos++;
		    } 
		  } 
		 
		tabNeg = new int[nbNeg];  
		tabPos = new int[nbPos]; 
		
		int positionNeg=0; 
	    int positionPos=0; 
		
		 for(int i=0; i<tab.length; i++)//boucle qui remplit les tableaux tabNeg et tabPos
		  { 
		    if (tab[i]<0) 
		    { 
		       tabNeg[positionNeg]=tab[i]; 
		       positionNeg++;
		    } 
		    else if (tab[i]>0) 
		    { 
		     tabPos[positionPos]=tab[i];
		     positionPos++;
		    } 
		  }
0
Sims' > JavaNoob
1 déc. 2008 à 11:24
Hello,

Malheureusement, je ne vois pas comment tu pourrais faire en faisant qu'une boucle, à moins de connaître le nombre d'élément au paravant...

A la limite, dans la boucle général tu compte les éléments afin de déterminer un stop. Tu peux utiliser tes variables positionNeg et positionPos comme arret au moment de l'affichage des tableaux...

genre :

for(int i=0; i<positionNeg; i++)
{
    System.out.println(tabNeg[i]); //je suis plus sur du system.out.println à vérifier
}

for(int i=0; i<positionPos; i++)
{
    System.out.println(tabPos[i]);
}


sinon tu stock tout dans une arraylist au lieu d'un tableau et tu fait simplement des add, mais tu auras des object Integer au lieu de int.
0