Modification de valeurs dans un tableau
newCodeGirl
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
J'apprends a coder en java depuis peu , et j'ai eu un mini projet a réalisé, voici le code:
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
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:
- Modification de valeurs dans un tableau
- Tableau word - Guide
- Suivi de modification word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Imprimer un tableau excel - Guide
1 réponse
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 :
Mais plutôt :
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) {