Modification de valeurs dans un tableau

Fermé
newCodeGirl - Modifié par KX le 24/06/2016 à 22:46
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 24 juin 2016 à 22:57
Bonjour,

J'apprends a coder en java depuis peu , et j'ai eu un mini projet a réalisé, voici le code:

    class Recette {

    String titreRecette;
    int choix;//choix dans le programme de 1 a 5
    int i;// index tabNotes
    int j;// index tabMoyennes
    int index; //index de taRecette
    int numRecette;//numero de la recette correspond egalement al'index
    double note;//note courante de la recette
    double laNote;//nouvelle note de la recette
    final double noteMax = 5.0;//nombre d'étoiles max que peux prendre une recette
    double moyenne;// moyenne entre la note actuelle et la nouvelle note
    double tampon;
    boolean permut;
    String affichageTrie;
    private static Scanner dr;
    private Scanner sb;

        
        
     
        public String toString(String tabRecettes[]) {//affichage les recettes dans l'ordre du livre
            String affichageFinal = "";
            for (int index = 0; index < tabRecettes.length; index++) {
                     affichageFinal += "[" + index + "] |"; //0, 1, 2...9
                     affichageFinal += tabRecettes[index]; // le nom de la recette
                     affichageFinal += "\n";
          
            }
             return affichageFinal;
        }
                
        
        public double calculerMoyenne(double tabMoyennes[],String tabRecettes[], double tabNotes[]) {//CALCUL DE MOYENNE, conversion des types

            for(int j = 0 , i = 0; j < tabMoyennes.length-1 && i <tabRecettes.length-1; j++, i++){
             tabNotes[i]=note;
             moyenne= note+laNote;
                tabMoyennes[j] = moyenne%2;
        }
            return tabMoyennes[j];
        }

    public String afficherNote(String tabRecettes[], double tabNotes[]){//affiche une note
     String affichage="";
     Recette maRecette = new Recette();
        System.out.println("selectionnez le numero de la recette dont vous voulez voir la note:");
        sb = new Scanner(System.in);
            int numRecette = sb.nextInt();
            boolean recetteConnue = false;
        for( int index = 0 ; index != 9; index ++ ){
            if (numRecette    == index){
                recetteConnue = true;
        }
    }
        if (recetteConnue){
         System.out.println(maRecette.calculerMoyenne(tabNotes, tabRecettes, tabNotes));
            laNote = tabNotes[i];
            affichage = "La note de la recette "+numRecette+" est "+laNote;
}    return affichage;
}

    public String ajouterNote(double tabNotes[], String tabRecettes[]) {//INSERTION D'UNE NOTE
    String affichage= "";
     Recette maRecette = new Recette();
     for (i=0; i<=9; i++){
   tabNotes[i]= laNote;
        
        System.out.println("Numero de la recette à noter:");
        
            int numRecette = Lire.entierInt();
        boolean recetteConnue = false;
        for( int index = 0 ; index != 9 ; index ++ ){
            if (numRecette    == index){
                recetteConnue = true;
        }
    }
        if (recetteConnue){
        
         System.out.println("Entrez une note comprise entre 1 et 5:");
            double laNote = Lire.reelDouble();
           
            for (i=0; i<tabNotes.length;i++){
             if (laNote>noteMax){
                 laNote=noteMax;
                 affichage = "La note maximale prise en compte est 5 , vous venez d'entrer la note "+laNote+" a cette recette";}
             else if (laNote<0){
                    laNote=0;
                    affichage = "La note minimale prise en compte est 0 , vous venez d'entrer la note "+laNote+" a cette recette";}
        }
         
            affichage = "Vous venez d'entrer la note de "+laNote+" a cette recette";
                  
        }       
        else { affichage = "Selection invalide , taper un numero de recette entre 0 et 9";}
        }
 return affichage; 
 
        
}
        
    void triNoteDecroissant(double tabMoyennes[]) {//tri des notes par ordre decroissant
        int longueur = tabMoyennes.length;
        double tampon = 0;
        boolean permut;
 
        do {
            // hypothèse : le tableau est trié
            permut = false;
            for (int j = 0; j < longueur - 1; j++) {
                // Teste si 2 éléments successifs sont dans le bon ordre ou non
                if (tabMoyennes[j] < tabMoyennes[j + 1]) {
                    // s'ils ne le sont pas, on échange leurs positions
                    tampon = tabMoyennes[j];
                    tabMoyennes[j] = tabMoyennes[j + 1];
                    tabMoyennes[j + 1] = tampon;
                    permut = true;
                }
            }
        } while (permut);
        
            }

    

private String afficherTri(String tabRecettes[], double tabMoyennes[]) {//affiche la liste triée
 
          String affichageTrie = " ";
 
 
        //triNoteDecroissant(tabMoyennes);
 
        for(int j = 0 , index = 0; j < tabMoyennes.length && index <tabRecettes.length; j++, index++){
            //System.out.println(tabMoyennes[j]);
            affichageTrie += "[" + index + "] |";
            affichageTrie += tabRecettes[index];
            affichageTrie += tabMoyennes[j] + "/5";
            affichageTrie += "\n";
        
        }
         return affichageTrie;
    }
 
    
 
    

public static void main (String[] args){
Recette maRecette = new Recette();
String tabRecettes[] = {
 "Boeuf bourguignon",
        "Radis beurre",
        "Lasagnes",
        "Risotto aux cepes",
        "Pizza reine",
        "Spaguettis bolognaise",
        "Gratin de courgettes",
        "Couscous royal",
        "Hachis parmentier",
        "Quiche lorraine"};//tableau contenant le titre des recettes
double tabNotes[]= new double [10];//tableau contenantles notes des recettes
double tabMoyennes[]= new double [10];//tableau contenant le calcul des moyennes
boolean arret= false;
while (!arret){
        //MENU
          System.out.println("--------------------MENU--------------------------------");
          System.out.println("1: Afficher les recettes dans l'ordre du livre---Tapez 1");
                 System.out.println("2: Afficher les recettes par note decroissante---Tapez 2");
                 System.out.println("3: Afficher la note d'une recette---Tapez 3");
                 System.out.println("4: Ajouter une note pour une recette---Tapez 4");
                 System.out.println("5: Quitter le programme---Tapez 5");

            
        //CHOIX

        
dr = new Scanner(System.in);
int choix =dr.nextInt();

if (choix > 0  && choix < 6) {
 // Switch constructor
    switch (choix) {
case 1:    //AFFICHER LES RECETTES DANS L ODRE DU LIVRE
      System.out.println(maRecette.toString(tabRecettes));
     break;
   
case 2://AFFICHER RECETTES PAR NOTES DECROISSANTES

      System.out.println(maRecette.afficherTri(tabRecettes, tabMoyennes));
      break;
     
    
case 3://AFFICHER LA NOTE D UNE RECETTE
    System.out.println(maRecette.toString(tabRecettes));
System.out.println(maRecette.afficherNote(tabRecettes, tabMoyennes));
  break;

case 4://AJOUTER UNE NOTE
      System.out.println(maRecette.toString(tabRecettes));
   System.out.println(maRecette.ajouterNote(tabMoyennes,tabRecettes));
      System.out.println(maRecette.calculerMoyenne(tabMoyennes, tabRecettes, tabNotes));
      
      break;
    
case 5://QUITTER LE PROGRAMME
      System.out.println("Merci d'avoir utilisé le programme");
      System.exit(1);
      break;
      
    } 
} else {
 System.out.println("Selection invalide, entrer un chiffre entre 1 et 5");
}
    }

    }


    }


Toutes mes methodes fonctionnent , je n'ai pas d'erreur de compilation mais je n'arrive pas a modifier les valeurs des tableaux du coup les resultats sont faux .
Je ne sais pas trop comment proceder
Petite precision je ne peux pas utiliser ArrayList

J'aimerai que l'on m'explique pourquoi cela ne fonctionne pas

merci d'avance pour vos reponses
A voir également:

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
24 juin 2016 à 22:57
Bonjour,

Grosse erreur "évidente" : c'est toute tes variables déclarées au début de la classe.

Java fait de la programmation objet, donc les seules variables que tu devrais avoir à ce niveau là, c'est ce qui représente l'objet de ta classe Recette.
Donc numRecette, titreRecette, note... ok, c'est normal.

Par contre, i, j, index, choix... ça n'a rien à faire là. C'est utilisé par les méthodes, donc déclares les dans les méthodes, certaines d'ailleurs sont déclarées en doubles, tantôt dans la classe, tantôt dans la méthode.
Du coup tu ne modifies pas toujours la bonne valeur, car parfois tu travailles avec celle de la méthode, parfois celle de la classe, d'où les conflits.

Il faut que tu travailles avec la notion d'objet Java, sinon ça ne sert à rien.

Par exemple il ne faut pas faire :
public double calculerMoyenne(double tabMoyennes[], String tabRecettes[], double tabNotes[]) {

Mais plutôt :
public static double calculerMoyenne(Recette[] recettes) {
0