Algorithme " Comment Attribué plusieurs valeur pour une String"

Fermé
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017 - 8 févr. 2017 à 20:56
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017 - 10 févr. 2017 à 23:48
Bonjour, Voilà je suis sur un mini programme qui consiste à afficher le nombre de finalistes d'un championnat (quelque critères sont pris en compte pour déterminé les finalistes ) cependant je voudrais apportés quelques modifications aux programme comme le fait d'afficher en fin de programme tout les participants finalistes : Par Exemple : (nombre De Finaliste : 2 , Les Finaliste sont : Participants 1 et Participant 7 ) , Si d'autre amélioration sont à faire pour amélioré la lisibilité du code je suis preneur Merci d'avance :
Voici Mon code:

 public class Championnat{
  public static java.util.Scanner scanner = new java.util.Scanner(System.in);
  public static void main(String[]args){
  
  System.out.println("Veuillez introduire le nombre de participants");
   int nbrParticipants = scanner.nextInt();
   int finnaliste = 0;
   
   for(int i = 1; i <= nbrParticipants ; i++){
     System.out.println("Participant : " + i);
      double moyenne = calculeCote();
     System.out.println("Participant : " + i + " Voici sa moyenne : " + moyenne);
     
     if(moyenne >= 8){
       finnaliste++;
     }      
   }
     System.out.println("Voici le nombre de Finnaliste : " +  finnaliste); 
     
  }
 
 
   public static double calculeCote(){
   int bestCote = 0;
   int badCote = 10;
   int sommeCote = 0;
   int moyenne = 0;
   
   for(int i=1; i <=8 ; i++){
     System.out.println("Cote : " + i);
     int cote = scanner.nextInt();
     if(cote > 10){
     System.out.println("Votre cote doit etre inférieur ou égal 10");
     return 0;
     }
     
     if(cote > bestCote)
     bestCote = cote;
    
     else if (badCote > cote)
     badCote = cote; 
     
     sommeCote = sommeCote + cote;
     moyenne = (sommeCote - bestCote - badCote)/6;
   }  
   return moyenne;
  } 
 }

1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
8 févr. 2017 à 21:09
Bonjour,

Au risque de me répéter par rapport à tes discussions précédentes, tu dois séparer tes méthodes de calculs des méthodes interactives (System.out/Scanner).

De plus le return 0 dans le cas où cote > 10 c'est violent. Il faudrait que tu puisses recommencer la saisie sans fausser tout le programme.

Et même si on a bien compris que tu ne voulais pas utiliser de tableaux, il y a un moment où tu ne vas pas avoir le choix. Tu ne peux pas continuer indéfiniment à te restreindre dans ton projet, si tu as plusieurs quelque chose, alors ça veut dire tableau (ou Collection, mais plus tard).
0
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017
8 févr. 2017 à 21:35
d'accord merci mais je ne vois pas très bien quand vous voulez dire séparé (System.out/Scanner). Oui l'idéal serait d'utilisé un do while je tacherais de le faire , Oui je m'en doutais que le mieux serais de stocker mes différents Finaliste dans mon tableaux puis affiché mon tableaux de finaliste mais je vois pas très bien comment m'y prendre sachant que j'ai beaucoup de mal quand à l'utilisation des tableaux :/
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
8 févr. 2017 à 22:03
Quand je dis séparer les méthodes, ça veur dire qu'une méthode qui fait des calculs, par exemple calculeCote() ne devrait pas avoir de System.out.println ni de scanner.nextInt, c'est une méthode de calcul donc elle ne doit faire que des calculs.

Si tu veux faire le calcul sur plusieurs cotes il faut les passer en paramètre de la méthode, via un tableau, mais le remplissage du tableau avec affichage et lecture du clavier doit se faire à part.

public static double calculeCote(int[] cotes) {
    int bestCote = Integer.MIN_VALUE;
    int badCote = Integer.MAX_VALUE;
    double sommeCote = 0;

    for (int cote : cotes) {

        if (cote > bestCote) {
            bestCote = cote;
        }

        if (badCote > cote) {
            badCote = cote;
        }

        sommeCote += cote;
    }

    return (sommeCote - bestCote - badCote) / (cotes.length - 2);
}
0
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017
8 févr. 2017 à 22:36
d'accord Merci beaucoup ! je vois vous a peut près procédez pour la méthode par contre selon les circonstances comment savoir quand utilisé un for ou foreach ? et pour le main j'vois pas comment sa va se déroulé j'ai du mal a visualisé commet on va entré les cote et surtout comment les mettre dans le tableaux ( t[0] , t [1] ... )
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
8 févr. 2017 à 22:44
"comment savoir quand utilisé un for ou foreach"
Si tu peux utiliser le for each fais le, et n'utilises le for que pour les cas où tu as besoin de l'index d'itération.

"commet on va entré les cote "
De la même manière que précédemment, tu fais une boucle, avec tes println et tes scanner sauf qu'au lieu d'avoir une nouvelle variable; à chaque itération tu utilises une case du tableau.

int[] cotes = new int[8);
for (int i=0; i<cotes.length; i++) {
     System.out.println("Cote : " + (i+1));
     cotes[i] = scanner.nextInt();
}
0
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017
8 févr. 2017 à 23:32
d'accord Merci beaucoup ! Et pour Entré tout les concurrents et affichés les Finalistes je devrais en faire une méthode à part selon vous ? fin j'en suis persuadé mais je préfère en avoir le coeur net , Par contre je viens de me rendre compte qu'on ne peut pas définir la taille d'un Tableaux de String sur base d'une variable ayant pour type un entier :/ fin j'veux dire par là que y'a un décalage dans ma boucle :/

 
  System.out.println("Entré le nombre de participants"); 
   int nombreConcurent = scanner.nextInt();
   String [] nom= new String [nombreConcurent];
   
   for(int i =0; i < nom.length; i++){
    System.out.println("Entré le nom du participant : " + (i+1));
     nom[i] = scanner.nextLine();
   
   
   }
0