Classer nombre ordre croissance java

Fermé
Utilisateur anonyme - 27 févr. 2013 à 23:36
 Utilisateur anonyme - 28 févr. 2013 à 20:41
Bonjour,

J'ai fait un programme qui tire 10 au hassard et qui les classes dans l'ordre croissant mais celui-ci ne marche pas: on met qu'il y a une erreur:if (nombre<mylist[nombre])

voici mon code:

public class ordreCroissant{
public static void main(String[] args) {

int nombre, i;

int [] mylist = new int [10];
int tirage;

tirage = 1;

while (tirage <=10)
{
nombre = (int)(Math.random()*10000)+1;
for (i=0; i<=nombre; i++)
{
if (nombre<mylist[nombre])
{
mylist[nombre] = nombre + 1;
}
mylist[i] = nombre;
}
tirage = tirage + 1;
}
System.out.println("Voici les nombres dans l'ordre croissant :" + mylist[10] + "");
}}
merci de votre aide
A voir également:

2 réponses

arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
28 févr. 2013 à 01:14
if (nombre<mylist[nombre])

Tu es sûr que ton tableau comporte jusqu'à 10000 éléments?

Il faut donc écrire :

if (nombre<mylist[i])

Par ailleurs, tu effectues le tri directement en tirant les entiers.

Il est préférable de tirer 10 entiers auparavant avec une boucle FOR. Puis ensuite de faire le tri avec une autre boucle FOR
0
Utilisateur anonyme
28 févr. 2013 à 11:25
J'ai remplacer la ligne et sa me dit que sa bloque toujours à ce niveau
0
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
28 févr. 2013 à 20:01
C'est normal.

Même en mettant cela ça ne fonctionne pas car le programme est mal pensé :-)

for (i=0; i<=nombre; i++)

Ici imaginons que le nombre en question est 3245, la taille de MyList elle n'est que de 10.

Donc si on met MyList[i] cela va chercher en partant de 0 chaque élément, sauf qu'arrivé à 10, cela ne marche plus car on a dépassé la taille du tableau et on essaie alors de lire un élément inexistant.

Commencez déjà par faire une boucle de génération des entiers avant de vouloir les trier.
0
Utilisateur anonyme
28 févr. 2013 à 20:25
dans ma liste je peut mettre des entiers supérieurs à 10 pourtant. 10 c'est la taille de mon tableau, il y aura 10 nombres dedans
0
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
28 févr. 2013 à 20:27
Oui sauf que vous utilisez la valeur de nombre pour lire un élément du tableau,c'est ça l'erreur.

Si nombre=3245, du coup cette instruction :

for (i=0; i<=nombre; i++)

Devient :

for (i=0; i<=3245; i++)

et donc par prolongation :

if (nombre<mylist[nombre])

Devient à la fin

if (nombre<mylist[3245])

Comme MyList ne contient que 10 valeurs, il est impossible de chercher la valeur contenue à la place 3245 voire même celle à l'emplacement 10 parce que celle-ci n'existe pas.
0
Utilisateur anonyme
28 févr. 2013 à 20:32
for (i=0; i<=10; i++)
c Bon?
0
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
28 févr. 2013 à 20:33
Toujours pas.

Si un tableau a une taille de 10, les emplacements possibles sont notés de 0 à 9

Donc i<10, pas <=
0
Utilisateur anonyme
28 févr. 2013 à 20:34
Voici mon nouveau code mais il m'indique toujours une erreur :mylist[nombre] = nombre + 1;
int nombre, i;

int [] mylist = new int [10];
int tirage;

tirage = 1;

while (tirage <=10)
{
nombre = (int)(Math.random()*10000)+1;
for (i=0; i<10; i++)
{
if (nombre<mylist[i])
{
mylist[nombre] = nombre + 1;
}
mylist[i] = nombre;
}
tirage = tirage + 1;
}
System.out.println("Voici les nombres dans l'ordre croissant :" + mylist[10] + "");
0