JAVA - Tableau
JavaNoob
-
Sims' -
Sims' -
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.
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.
Configuration: Windows XP Firefox 3.0.4
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++; } }-
- 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
- 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++; } } - 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.
-