Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ranger dans l'odre croissant sans array

25 réponses
Avatar
natdy
Bonjour,
J'écrit un programme qui génère 10 nombre et qui doit les ranger dans l'ordre croissant puis les afficher mais celui ne fonctionne pas. voici mon code:

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++)
{
mylist[10] = nombre + i;
}
tirage = tirage + 1;
}
System.out.println("Voici les nombres dans l'ordre croissant :" + mylist[10] + "");

Merci de votre aide

10 réponses

1 2 3
Avatar
Yliur
Le Thu, 28 Feb 2013 16:12:39 -0600
natdy a écrit :

Bonjour,
J'écrit un programme qui génère 10 nombre et qui doit les ranger dans
l'ordre croissant puis les afficher mais celui ne fonctionne pas.
voici mon code:

int nombre, i;

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

tirage = 1;

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

Merci de votre aide



Juste pour simplifier la lecture, la boucle et sa variable tirage
peuvent s'écrire :
for (int tirage = 1 ; tirage <= 10 ; tirage++)
{
...
}

Ou encore (un cas plus courant, même si l'autre fonctionne aussi bien
dans ce cas) :
for (int tirage = 0 ; tirage < 10 ; tirage++)

De la même manière, la variable i l'a pas besoin d'être déclarée au
début, elle pourrait être déclarée dans la boucle for (comme mon
exemple ci-dessus). Ce serait plus facile à lire.

Sinon je ne vois pas comment ce code pourrait trier des nombres. Quel
algorithme de tri cherches-tu à implémenter ?

Ici, à chaque tirage tu vas remplir la liste de nouveaux nombres (c'est
ce que fait la boucle interne, elle remplit toutes les cases à chaque
fois). Ces nombres sont égaux au nombre aléatoire + leur emplacement
dans le tableau (c'est ce que fait nombre + i). Si le nombre tiré est
33, tu devrais avoir un tableau contenant 33, 34, ... 42. C'est bien ce
que tu obtiens ?

Cherches-tu par hasard à écrire un tri par insertion ?

Pour afficher les nombres dans ton message final, tu devrais écrire
Arrays.toString (mylist) et non mylist[10] : mylist[10] est la 11ème
valeur de mylist (les valeurs sont numérotées à partir de 0), donc
d'abord c'est une valeur unique et tu veux afficher la séquence,
ensuite il n'y a que 10 valeurs dans ton tableau, dans les cases 0 à 9
et tu vas avoir une exception si tu tentes de récupérer la 11ème (case
numérotée 10). Est-ce que c'est clair ?
Avatar
Toxico Nimbus
Le 28/02/2013 23:12, natdy a écrit :
Bonjour,
J'écrit un programme qui génère 10 nombre et qui doit les ranger dans l'ordre
croissant puis les afficher mais celui ne fonctionne pas. voici mon code:

int nombre, i;

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

tirage = 1;

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

Merci de votre aide



Si tu alloue un tableau de 10 entiers (new int [10]) alors tu ne peux
pas affecter mylist[10] : c'est un dépassement de capacité, les indices
doivent varier de 0 à 9.

Sur la dernière ligne, tu n'affiches qu'un seul nombre, avec encore le
dépassement de capacité.Il te faut une boucle ici aussi.

Pourquoi avoir deux boucles imbriquées ? Une seule devrait suffire à
remplir ton tableau.

Il n'y a pas de tri dans ce programme.

pour commencer tu peux remplacer la boucle for entière par :
mylist[tirage-1] = nombre;

Ainsi tu auras déjà un tableau vraiment rempli de nombres aléatoires.
Avatar
Samuel DEVULDER
Le 28/02/2013 23:48, Yliur a écrit :
Ici, à chaque tirage tu vas remplir la liste de nouveaux nombres (c'est
ce que fait la boucle interne, elle remplit toutes les cases à chaque
fois). Ces nombres sont égaux au nombre aléatoire + leur emplacement
dans le tableau (c'est ce que fait nombre + i). Si le nombre tiré est
33, tu devrais avoir un tableau contenant 33, 34, ... 42. C'est bien ce
que tu obtiens ?



Même pas.. Le code fait:

mylist[10] = nombre + i;



Normalement ca fait juste un array out of bounds.

L'algo de tri n'est ni fait ni à faire. Ca ressemble à du code généré au
pif en espérant que ca marche "par magie" parce qu'on a pas compris
l'algo à implémenter.

sam.
Avatar
natdy
Le jeudi 28 Février 2013 à 23:12 par natdy :
Bonjour,
J'écrit un programme qui génère 10 nombre et qui doit les
ranger dans l'ordre croissant puis les afficher mais celui ne fonctionne pas.
voici mon code:

int nombre, i;

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

tirage = 1;

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

Merci de votre aide


J'ai refais mon programme, mais il ne me génère que 5 nombre et ne les classe pas dans l'ordre. Pour classer dans l'odre, je cherche autre chose que la fonction Array

public class générer10nombres {
public static void main(String[] args) {

int nombre, i;

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

tirage = 1;

for (tirage = 1 ; tirage <= 10 ; tirage++)
{
nombre = (int)(Math.random()*10000)+1;
mylist[9] = nombre;
tirage = tirage + 1;
System.out.println(mylist[9]);
}
}}
Avatar
Toxico Nimbus
Le 01/03/2013 11:32, natdy a écrit :
Le jeudi 28 Février 2013 à 23:12 par natdy :
Bonjour,
J'écrit un programme qui génère 10 nombre et qui doit les
ranger dans l'ordre croissant puis les afficher mais celui ne fonctionne pas.
voici mon code:

int nombre, i;

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

tirage = 1;

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

Merci de votre aide


J'ai refais mon programme, mais il ne me génère que 5 nombre et ne les classe
pas dans l'ordre. Pour classer dans l'odre, je cherche autre chose que la
fonction Array



Je ne sais pas de quelle fonction Array tu parles, mais ça n'est sans
doute pas une fonction de tri, Array signifiant tableau.

public class générer10nombres {
public static void main(String[] args) {

int nombre, i;

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

tirage = 1;

for (tirage = 1 ; tirage <= 10 ; tirage++)
{
nombre = (int)(Math.random()*10000)+1;
mylist[9] = nombre;
tirage = tirage + 1;
System.out.println(mylist[9]);
}
}}



Même erreur que précédemment, tu rempli à chaque itération la 10ème case
du tableau, et seulement celle-ci. Ton tableau ne risque pas de se
remplir. Il faut que tu utilise tirage-1 comme index pour remplir et
afficher le tableau.
Avatar
Vivien MOREAU
natdy writes:

public class générer10nombres {
public static void main(String[] args) {

int nombre, i;

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

tirage = 1;



L'affectation ci-dessus est inutile, puisqu'elle est faite dans la
boucle for ci-dessous.

for (tirage = 1 ; tirage <= 10 ; tirage++)
{



Ici, tu demandes à effectuer la boucle dix fois : la valeur 1 est
affectée à tirage avant le début de la boucle, puis à l a fin de chaque
itération de la boucle, tirage est incrémentée une fois (tir age++ est
équivalent à tirage = tirage + 1). Le programme sort de la bouc le
lorsque tirage est strictement supérieure à 10. Bon, c'est une ma nière
standard de faire, même si, comme on te l'a dit on écrit plutà ´t :

for (tirage = 0; tirage < 10; tirage++)

tirage = tirage + 1;



Mais un des problèmes est là : tu incrémentes également tirage dans le
corps de la boucle. Résultat, à chaque itération, tirage aug mente de 2.
C'est sale et c'est la raison pour laquelle tu ne vois s'afficher que
cinq nombres : la boucle n'est effectuée que cinq fois.

nombre = (int)(Math.random()*10000)+1;
mylist[9] = nombre;



Cette instruction place quelque soit la valeur de tirage la valeur de
nombre dans la dixième case du tableau mylist (c'est-à-dire la ca se
n°9). Ce n'est sans doute pas ce que tu veux faire.

System.out.println(mylist[9]);



Et de même, celle-ci affiche le contenu de la dixième case du tab leau.

Il n'y a effectivement pas dans tout ça le moindre début de tri du
tableau. Avant de penser à t'amuser avec les tris, tu devrais voir ou
revoir les tableaux et les boucles (ça tombe bien, ça va ensemble ). :-)

Sinon, un énoncé complet du problème que tu cherches à résoudre aiderait
à te donner des pistes.

--
Librement,
Vivien
Avatar
natdy
Le jeudi 28 Février 2013 à 23:12 par natdy :
Bonjour,
J'écrit un programme qui génère 10 nombre et qui doit les
ranger dans l'ordre croissant puis les afficher mais celui ne fonctionne pas.
voici mon code:

int nombre, i;

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

tirage = 1;

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

Merci de votre aide


J'ai mi sa et sa me sort qu'un nombre
for ( tirage=0; tirage < 10; tirage--)

erreur:
mylist[tirage] = nombre;
Avatar
natdy
Le jeudi 28 Février 2013 à 23:12 par natdy :
Bonjour,
J'écrit un programme qui génère 10 nombre et qui doit les
ranger dans l'ordre croissant puis les afficher mais celui ne fonctionne pas.
voici mon code:

int nombre, i;

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

tirage = 1;

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

Merci de votre aide


J'ai refait un peu mon programme mais je chercher toujours à mettre par ordre croissant. Je pense qu'il comparer mon nombre tiré avec ceux de la liste mais je c pas comment faire:

public class générer10nombres {
public static void main(String[] args) {

int nombre;

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


for ( tirage=0; tirage < 10; tirage++) {
nombre = (int)(Math.random()*10000)+1;
mylist[tirage] = nombre;
System.out.println(mylist[tirage]);

}
}}
Avatar
Toxico Nimbus
Le 01/03/2013 14:29, natdy a écrit :

J'ai refait un peu mon programme mais je chercher toujours à mettre par ordre
croissant. Je pense qu'il comparer mon nombre tiré avec ceux de la liste mais je
c pas comment faire:

public class générer10nombres {
public static void main(String[] args) {

int nombre;

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


for ( tirage=0; tirage < 10; tirage++) {
nombre = (int)(Math.random()*10000)+1;
mylist[tirage] = nombre;
System.out.println(mylist[tirage]);

}
}}



Renseigne toi d'abord sur les techniques de tri, il y a beaucoup de
documentation sur le sujet sur Internet. Les techniques les plus simples
à mettre en œuvre et à comprendre sont le tri à bulle et le tri par
insertion.
Avatar
Yliur
Le Fri, 01 Mar 2013 08:24:21 +0100
Samuel DEVULDER a écrit :

Le 28/02/2013 23:48, Yliur a écrit :
> Ici, à chaque tirage tu vas remplir la liste de nouveaux nombres
> (c'est ce que fait la boucle interne, elle remplit toutes les cases
> à chaque fois). Ces nombres sont égaux au nombre aléatoire + leur
> emplacement dans le tableau (c'est ce que fait nombre + i). Si le
> nombre tiré est 33, tu devrais avoir un tableau contenant 33,
> 34, ... 42. C'est bien ce que tu obtiens ?

Même pas.. Le code fait:

> mylist[10] = nombre + i;

Normalement ca fait juste un array out of bounds.



Effectivement, j'ai lu trop vite. P.... le conditionnement à comprendre
ce que font les choses par habitude !


L'algo de tri n'est ni fait ni à faire. Ca ressemble à du code généré
au pif en espérant que ca marche "par magie" parce qu'on a pas
compris l'algo à implémenter.



Oui. C'est pas grave, c'est souvent comme ça quand on commence, on est
perdu dans ce qu'il faut faire, comment marche le langage, ...

D'où ma question sur l'algo qu'il cherche.
1 2 3