Le problème vient du fait que tu mélanges collecte des résultats et affichage.
Ma suggestion est de faire deux méthodes : une qui retourne une liste des articles dans l'intervalle de prix et une qui affiche le résultat de la recherche.
// Retourne une liste avec les articles dans l'intervalle de prix.
List<Article> searchByIntervalle(int prixMin, int prixMax)
// Affiche une liste d'articles.
void afficherResultat(List<Article> articles)
Tu pourras éventuellement réutiliser cette deuxième méthode pour afficher les résultats de recherche avec d'autres critères.
A quel moment est-ce que tu remplis ta liste d'articles ?
Mis à part ça, dans ton foreach, la phrase "Acucun article trouvé" s'affichera pour chaque article n'étant pas dans l'intervalle voulu. Pour y remédier :
oui ça semble possible mais j'ai préféré faire ma méthode comme ça :
protected static void searchByIntervalle(int prixMin, int prixMax)
{
articles.forEach((article) ->
{
if (prixMin <= article.getPrix() && prixMax >= article.getPrix())
{
System.out.println(
"\nArticle correspondant à votre recherche :"
+ "\n - Id : " + article.getId()
+ "\n - Num de référance : " + article.getRef()
+ "\n - Nom : " + article.getName()
+ "\n - Prix : " + article.getPrix()
+ "\n - Stock : " + article.getStock()
+ "\n");
}
});
Est ce que tu valide ma solution ? Contient elle des bugs ? Peut elle être améliorée ?
HugoL.3 :
Enfaite je fais un gros programme et la je suis dans un switch voila pourquoi tu vois pas ou j'insert des valeurs.
/¬_¬\
Et si vous savez comment je pourrais protéger mes scanner des entrés qui ne sont pas du bon Type.
Exemple :
System.out.print("Veuillez saisir un nombre\n> ");
// l'utilisateur entre "Bonjour"
// alors java va crash "java.util.InputMismatchException"
int nbr = scanne.nextInt();
System.out.print(nbr);
Vous avez une idée pour contrer l'erreur ?
Merci
PS : je sais que sa part du sujet mais je demande au cas où
System.out.print("Veuillez saisir un nombre\n> ");
// l'utilisateur entre "Bonjour"
// alors java va crash "java.util.InputMismatchException"
int nbr = scanne.nextInt();
System.out.print(nbr);
Ca fait longtemps que je n'ai pas fait de Java, mais ça ne serait pas `Scanner.nextInt();` plutôt ?
System.out.print("Veuillez saisir un nombre\n> ");
// l'utilisateur entre "Bonjour"
// alors java va crash "java.util.InputMismatchException"
int nbr = scanne.nextInt();
System.out.print(nbr);
Ca fait longtemps que je n'ai pas fait de Java, mais ça ne serait pas `Scanner.nextInt();` plutôt ?
- Edité par HugoL.3 il y a environ 1 heure
Ca dépend quel nom tu donnes quand tu décales ton scanner.
La je l'ai décalé :
static Scanner scanne = new Scanner(System.in);
donc je l'ai nommer "scanne"
brubru777 a écrit:
Oui, ça marche mais on peut l'améliorer en faisant comme je te l'ai conseillé. Voici ce que ça donne
static List<Article> searchByIntervalle(int prixMin, int prixMax) {
return articles.stream()
.filter(article -> article.getPrix() >= prixMin && article.getPrix() <= prixMax)
.collect(Collectors.toList());
}
static void afficherResultat(List<Article> articles) {
if (articles.isEmpty()) {
// afficher "pas de résultats"
} else {
articles.forEach(Program::afficher);
// afficher à redéfinir dans Program ou Article
}
}
Comme ça tu sépares le traitement des données et l'affichage. C'est plus lisible et plus facile à modifier ou réutiliser.
Je comprend pas où tu appellerais t'as méthode afficherResultat et je ne comprend pas comment tu as pensée.
Merci pour ton code il fonctionne à merveille, par-contre je vais juste devoir me coller à la doc pour la partie du "searchByIntervalle" car je comprend pas tout, exemple :
"filter" sélectionne les éléments du flux (stream) qui vérifient un certain prédicat et abandonne les autres.
"collect" sert à collecter les résultats dans une structure de donnée. Ici, une liste.
J'ai utilisé l'API fonctionnelle de Java 8 parce que tu l'avais toi-même utilisée dans ton code mais si tu as du mal à comprendre ce code, il vaut peut-^^etre mieux que tu utilises des boucles for classiques.
Oui. Avec un try-catch, tu peux intercepter l'exception. Et avec une boucle do while, tu peux redemander la valeur.
Je vais faire un autre sujet pour ça car là je sort du thème.
En tout cas merci pour ton aide
- Edité par _.Linxy._ 22 janvier 2018 à 11:01:12
I'AM NOT A GEEK ❌ ! I'AM A GAMER 🎃🔥 !
Récupérer un intervalle de valeur dans arraylist
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
I'AM NOT A GEEK ❌ ! I'AM A GAMER 🎃🔥 !
I'AM NOT A GEEK ❌ ! I'AM A GAMER 🎃🔥 !
I'AM NOT A GEEK ❌ ! I'AM A GAMER 🎃🔥 !
I'AM NOT A GEEK ❌ ! I'AM A GAMER 🎃🔥 !
I'AM NOT A GEEK ❌ ! I'AM A GAMER 🎃🔥 !
I'AM NOT A GEEK ❌ ! I'AM A GAMER 🎃🔥 !