Trouver le minimum [Résolu]

helloworld95 - 19 mai 2017 à 13:22 - Dernière réponse : KX 15159 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 23 janvier 2018 Dernière intervention
- 23 mai 2017 à 17:57
Bonjour,

J'aimerai trouver le minimum mais cela ne fonctionne pas, il s'arrête dès la première comparaison.

	public int valeurMinimum(){
		int min = 0;
		for (int i = 0; i < nombresDEntiers; i++){
			for (int j = i+1; i < nombresDEntiers; i++){
				if (table[j] < table[i]){
					min = table[j];
				}
			}
			return min;
		}
		return 0;
	}
Afficher la suite 

5 réponses

Répondre au sujet
YCN- 145 Messages postés mercredi 24 juin 2015Date d'inscription 13 juillet 2017 Dernière intervention - Modifié par YCN- le 19/05/2017 à 14:05
0
Utile
4
Deux erreurs : pourquoi cette double boucle? Ensuite pourquoi tu initialise min à 0 ? ça n'est pas très logique, car il n'y pas de raison que ton tableau soit composé que de chiffre <0 non ? Ton code est étrange et très peu efficace (en plus de ne pas fonctionner) puisque pour chaque valeur tu vas comparer avec toutes les suivantes alors qu'en faite il suffit de comparer de proche en proche.

Voila ce que donne une version plus simple de ton programme :


public int valeurMinimum(){
int min = table[0];
int i;
for ( i = 0; i < nombresDEntiers; i++){
if (table[i] < min){
min = table[i];
}
}
return min;
}


de même :



public int valeurMaximum(){
int max = table[0];
int i;
for ( i = 0; i < nombresDEntiers; i++){
if (table[i] > max){
max = table[i];
}
}
return max;
}
KX 15159 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 23 janvier 2018 Dernière intervention - 19 mai 2017 à 19:29
Bonjour,

Deux remarques :
  • on peut commencer les boucles à i = 1 car table[0] est déjà pris en compte par l'initialisation.
  • dans la vraie vie, un développeur ne devrait pas avoir à faire ce genre de boucles, Java fournit déjà des classes utilitaires pour faire ça :

public static int valeurMinimum(int...table) {
    return java.util.Arrays.stream(table).min().getAsInt();
}
YCN- 145 Messages postés mercredi 24 juin 2015Date d'inscription 13 juillet 2017 Dernière intervention - 23 mai 2017 à 14:09
Hm c'est vrai que je suis pas dev java, alors j'adapte mon C.
Cependant je suis pas pour toujours réinventer la roue, mais là ça va pas faire de mal de savoir comment implémenter ce genre de truc...
C'est un peu triste même que l'on puisse se passer de coder ce genre de rudiment, de même que pour les recherches dans les tableaux, c'est des algo vraiment hyper fondamentale qu'il faut comprendre et implémenter soit même.

YCN-
KX 15159 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 23 janvier 2018 Dernière intervention > YCN- 145 Messages postés mercredi 24 juin 2015Date d'inscription 13 juillet 2017 Dernière intervention - 23 mai 2017 à 17:57
"ça va pas faire de mal de savoir comment implémenter ce genre de truc"
En effet, il y a de toute façon des cas où on ne peut faire que comme ça.

"c'est des algo vraiment hyper fondamentale qu'il faut comprendre et implémenter soit même."
Je suis moins d'accord, dans un contexte professionnel où l'on code des traitements de données à longueur de journée la moindre étourderie fausse tout.
Alors pouvoir utiliser des algorithmes dont le résultat et la performance sont garantis évitent au développeur de perdre de l'énergie à les refaire lui même au risque de se tromper.
Il faut voir d'ailleurs au delà de ce seul exemple que les stream en Java permettent de faire énormément de traitement avec une logique relativement simple à comprendre, ce qui permet aussi de mieux entrer dans un code existant sans avoir à décortiquer l'algo dans sa structure au plus bas niveau.
Commenter la réponse de YCN-