td11 en java

Aller en bas

td11 en java

Message par parachute le Mar 8 Déc - 20:57

Code:
import java.util.Scanner ;

public class TestIMC {

    public static void main ( String[] args ) {
   Personne personnage;
   Personne math = new Personne ("Math", 70, 180);
   Personne plop = new Personne ("Plop", 100, 175);
   System.out.println (math);
   Afficher (math.calculerIMC(), math.getNom());
   Afficher (plop.calculerIMC(), plop.getNom());
   personnage = maxIMC(lirePersonnes());
   Afficher (personnage.calculerIMC(), personnage.getNom());
   }
   
    public static void   Afficher (double total, String n){
   System.out.println("Indice de Masse Corporelle de " + n +" est de "+ total);
    }
   
   public static Personne[] lirePersonnes (){
   Scanner clavier = new Scanner ( System.in ) ;
   double taille;
   double poids;
   double imc;
   String nom;
   char out= 'n';
   int cpt =0;
   Personne [] tabPers;
   tabPers = new Personne [1000];

   while  (out == 'n' || out == 'N' ){
       System.out.println("Entrer un nom:  ");
       nom= clavier.next();
       System.out.println("Entrer la taille de "+nom);
       taille= clavier.nextDouble();
       System.out.println("Entrer le poids de "+nom);
       poids = clavier.nextDouble();
       System.out.println("Avez-vous fini? (Y/N)");
       out= clavier.next().charAt(0);
      tabPers = new Personne [cpt];
       cpt ++;
      if (out=='Y' || out == 'y')
      break;   
      }
   return tabPers;

   }   
       public static Personne maxIMC (Personne [] tab){
   Personne pers = null; // Sert a rien, null par définition...

   for (int i=0; i<tab.length;i++)
       pers  =  MaxImc (tab[i], tab [i+1]);

   return pers ;
   }

       public static Personne MaxImc (Personne pers1,Personne pers2){
          double imc1=pers1.calculerIMC();
          double imc2=pers2.calculerIMC();
          if (imc1<imc2)
              return pers2;
          else
              return pers1;
           }
}

Code:
public class Personne {
       private String nom;
   double poids;
   double taille;
   
   public Personne (String unNom, double unPoids, double uneTaille ){
      nom = unNom;
      poids= unPoids;
      taille= uneTaille;
}

   public String getNom(){
       return nom;}
   public double getTaille(){
       return taille;}
   public double getPoids(){
       return poids;}
   public String toString() {
       String res = "    " + nom + "    " + poids +"    "+ taille+"    ";
            return res;
   }
   public double calculerIMC(){
       double imc= poids/(taille*taille);
       return imc;}
}

erreur: Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The local variable pers may not have been initialized

at TestIMC.maxIMC(TestIMC.java:54)
at TestIMC.main(TestIMC.java:12)
avatar
parachute
CI recyclé

Nombre de messages : 4747
Age : 30
Cercle : C(E)I
Année Baptême : 07
Date d'inscription : 05/10/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: td11 en java

Message par Sarko le Mar 8 Déc - 21:42

a la ligne 12

Tu as une Personne personnage a qui tu envoi un tableau de personnage (lirePersonne)
avatar
Sarko

Nombre de messages : 2134
Age : 30
Cercle : CEI tapette ²
Année Baptême : 2006
Date d'inscription : 10/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: td11 en java

Message par Sarko le Mar 8 Déc - 21:45

Et la prochaine fois met quelques formes de politesse vieu noob Razz
avatar
Sarko

Nombre de messages : 2134
Age : 30
Cercle : CEI tapette ²
Année Baptême : 2006
Date d'inscription : 10/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: td11 en java

Message par parachute le Mar 8 Déc - 21:53

Lol ct pr que Joker voit le code^^

Merci, mais en faite
Code:
personnage = maxIMC(lirePersonnes());

est un objet personne.

maxIMC attend un tableau et renvoie un personne
avatar
parachute
CI recyclé

Nombre de messages : 4747
Age : 30
Cercle : C(E)I
Année Baptême : 07
Date d'inscription : 05/10/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: td11 en java

Message par Sarko le Mar 8 Déc - 21:58

arf ué :P putin tu programme comme de la merde n'empeche :P
avatar
Sarko

Nombre de messages : 2134
Age : 30
Cercle : CEI tapette ²
Année Baptême : 2006
Date d'inscription : 10/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: td11 en java

Message par Sarko le Mar 8 Déc - 22:02

En tt cas le probleme vien de la :

public static Personne maxIMC (Personne [] tab){
Personne pers = null; // Sert a rien, null par définition...

for (int i=0; i<tab.length;i++)
pers = MaxImc (tab[i], tab [i+1]);

return pers ;
}

Et plus precisement de la je dirais :

dans lirePersonne :

Personne [] tabPers;
tabPers = new Personne [1000];

Tu crée une tableau de 1000 personnes

Disons que tu en mette 100, il y aura 900 autre case tableau a NULL

Et dans ta boucle tu fais un tab.length , y aura bien un moment ou ca va manipulé des null, et il va craché nan ?
avatar
Sarko

Nombre de messages : 2134
Age : 30
Cercle : CEI tapette ²
Année Baptême : 2006
Date d'inscription : 10/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: td11 en java

Message par Sarko le Mar 8 Déc - 22:03

ah bah nan, tu fais un

tabPers = new Personne [cpt];
cpt ++;

Ce qui est bizzaare oO
avatar
Sarko

Nombre de messages : 2134
Age : 30
Cercle : CEI tapette ²
Année Baptême : 2006
Date d'inscription : 10/07/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: td11 en java

Message par parachute le Mar 8 Déc - 22:26

Sarko a écrit:En tt cas le probleme vien de la :

public static Personne maxIMC (Personne [] tab){
Personne pers = null; // Sert a rien, null par définition...

for (int i=0; i<tab.length;i++)
pers = MaxImc (tab[i], tab [i+1]);

return pers ;
}

Et plus precisement de la je dirais :

dans lirePersonne :

Personne [] tabPers;
tabPers = new Personne [1000];

Tu crée une tableau de 1000 personnes

Disons que tu en mette 100, il y aura 900 autre case tableau a NULL

Et dans ta boucle tu fais un tab.length , y aura bien un moment ou ca va manipulé des null, et il va craché nan ?

Ben oué, mais je sais plus cmt faire pour avoir un tableau qui évolue avec le nbre d'entrée (et non on peut pas faire de list)
avatar
parachute
CI recyclé

Nombre de messages : 4747
Age : 30
Cercle : C(E)I
Année Baptême : 07
Date d'inscription : 05/10/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: td11 en java

Message par parachute le Mar 8 Déc - 22:31

Bon ce probleme la est résolu, il me rest

Code:
Exception in thread "main" java.lang.NullPointerException
   at TestIMC.MaxImc(TestIMC.java:60)
   at TestIMC.maxIMC(TestIMC.java:53)
   at TestIMC.main(TestIMC.java:13)

j'ai changé ca:
Code:
   public static Personne[] lirePersonnes (){
   Scanner clavier = new Scanner ( System.in ) ;
   double taille;
   double poids;
   //double imc;
   String nom;
   char out= 'n';
   int cpt =0;
   Personne [] tabPers;
   tabPers = new Personne [10];

   while  (out == 'n' || out == 'N' ){
       System.out.println("Entrer un nom:  ");
       nom= clavier.next();
       System.out.println("Entrer la taille de "+nom);
       taille= clavier.nextDouble();
       System.out.println("Entrer le poids de "+nom);
       poids = clavier.nextDouble();
       System.out.println("Avez-vous fini? (Y/N)");
       out= clavier.next().charAt(0);
      tabPers[cpt] = new Personne(nom,poids,taille);
       cpt ++;
      if (out=='Y' || out == 'y')
      break;   
      }
   return tabPers;
avatar
parachute
CI recyclé

Nombre de messages : 4747
Age : 30
Cercle : C(E)I
Année Baptême : 07
Date d'inscription : 05/10/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: td11 en java

Message par Joker le Mar 8 Déc - 23:10

pour ton tableau ==> ne precise pas la taille Smile pour un tab dynamique ? non ?
pcq ton .length ici vate renvoyer 1000
avatar
Joker

Nombre de messages : 5294
Age : 28
Cercle : CEI
Année Baptême : 2008
Date d'inscription : 28/09/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: td11 en java

Message par parachute le Mer 9 Déc - 0:25

Voila apres plusieurs prises de tête, j'ai trouvé les erreurs. Si on entre pas deux personnes, plantage.

Si on remplissait pas le tableau, plantage.

Donc voila le code qui fait compilé et executer correctement^^

Code:
import java.util.Scanner ;

public class TestIMC {

    public static void main ( String[] args ) {
       Personne personnage;
       Personne math = new Personne ("Math", 70, 180);
       Personne plop = new Personne ("Plop", 100, 175);
       System.out.println (math);
       Afficher (math.calculerIMC(), math.getNom());
       Afficher (plop.calculerIMC(), plop.getNom());
       personnage = maxIMC(lirePersonnes());
       Afficher (personnage.calculerIMC(), personnage.getNom());
   }
   
    public static void   Afficher (double total, String n){
       System.out.println("Indice de Masse Corporelle de " + n +" est de "+ total);
    }
   
   public static Personne[] lirePersonnes (){
      Scanner clavier = new Scanner ( System.in ) ;
      double taille;
      double poids;
      String nom;
      char out= 'n';
      int cpt =0;
      Personne [] tabPers;
      tabPers = new Personne [10];

      while  (out == 'n' || out == 'N' ){
         System.out.println("Entrer un nom:  ");
         nom= clavier.next();
         System.out.println("Entrer la taille de "+nom);
         taille= clavier.nextDouble();
         System.out.println("Entrer le poids de "+nom);
         poids = clavier.nextDouble();
         System.out.println("Avez-vous fini? (Y/N)");
         out= clavier.next().charAt(0);
         tabPers[cpt] = new Personne(nom,poids,taille);
         
         if (out=='Y' || out == 'y' && cpt<1){
            if (cpt<1){
               System.out.println("Il faut 2 personnes au minimum! Rajoutez-en une!");
               out = 'n';}
            else
               break;   
         }
         cpt ++;
      }
   
      return tabPers;

   }   
   public static Personne maxIMC (Personne [] tab){
      Personne pers = null;

      for (int i=0; i<tab.length-1 ;i++){
         if (tab[i+1]!= null)
            pers  =  MaxImc (tab[i], tab [i+1]);
   
      }return pers ;
   
   }

    public static Personne MaxImc (Personne pers1,Personne pers2){
       double imc1=pers1.calculerIMC();
       double imc2=pers2.calculerIMC();
       if (imc1<imc2)
           return pers2;
       else
           return pers1;
       }
}

Code:
public class Personne {
    private String nom;
   double poids;
   double taille;
   
public Personne (String unNom, double unPoids, double uneTaille ){
   nom = unNom;
   poids= unPoids;
   taille= uneTaille;
}

public String getNom(){
   return nom;}
public double getTaille(){
   return taille;}
public double getPoids(){
   return poids;}
public String toString() {
   String res = "    " + nom + "    " + poids +"    "+ taille+"    ";
    return res;
   }
public double calculerIMC(){
   double imc= this.getPoids()/(this.taille/100*this.taille/100);
   return imc;}
}

BOn je peux enfin m'attaquer a la suite de l'exo Very Happy
avatar
parachute
CI recyclé

Nombre de messages : 4747
Age : 30
Cercle : C(E)I
Année Baptême : 07
Date d'inscription : 05/10/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: td11 en java

Message par dax le Mer 9 Déc - 10:01

Ce qui me fait peur, c'est me dire que je codais aussi comme ca avant !
morfl

Avant c etais mieuuux... oupas !
avatar
dax

Nombre de messages : 2257
Age : 35
Cercle : CEI
Année Baptême : 2005
Date d'inscription : 29/07/2008

Voir le profil de l'utilisateur http://www.noobeek.com

Revenir en haut Aller en bas

Re: td11 en java

Message par kortenberg le Mer 9 Déc - 10:13

Tu sais que ta fct
public static Personne maxIMC (Personne [] tab)
retourne le max entre les deux derniers élément?

Que ta "protection" if (tab[i+1]!= null)
fait juste que ça se torche une iteration plus loin si un élément est null au millieu?

Ta protection anti null devrait se trouver dans
public static Personne MaxImc (Personne pers1,Personne pers2)
avatar
kortenberg

Nombre de messages : 1156
Age : 37
Cercle : CI
Année Baptême : 2001
Date d'inscription : 11/12/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: td11 en java

Message par pas de chance le Mer 9 Déc - 10:28

si tu screen le shot en warcraft tu nuul le [Ctrlx²-(1+1)!+4=7]

donc tu in le charout sur la base de donné en spp sur le bus

et pour finir tu break le seat via un double MaxImc flash




bon ok dehors lol!

_________________
YES WE CANette !!!




http://www.perdu.com/


_________________
Burger paie ton fût!
avatar
pas de chance
Délégué nécrophile

Nombre de messages : 9068
Age : 29
Cercle : CEI le meilleur cercle du monde
Année Baptême : 2008
Date d'inscription : 03/09/2008

Voir le profil de l'utilisateur http://www.jeunessedevirelles.be

Revenir en haut Aller en bas

Re: td11 en java

Message par kortenberg le Mer 9 Déc - 12:02

Parachute a écrit:Ben oué, mais je sais plus cmt faire pour avoir un tableau qui évolue avec le nbre d'entrée (et non on peut pas faire de list)
Même pas Vector<E> ?
Edit:
Parachute a écrit:Ben oué, mais je sais plus cmt faire pour ...
et même pas avec google?
avatar
kortenberg

Nombre de messages : 1156
Age : 37
Cercle : CI
Année Baptême : 2001
Date d'inscription : 11/12/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: td11 en java

Message par parachute le Mer 9 Déc - 12:17

kortenberg a écrit:
Parachute a écrit:Ben oué, mais je sais plus cmt faire pour avoir un tableau qui évolue avec le nbre d'entrée (et non on peut pas faire de list)
Même pas Vector<E> ?

Salut moi c'est Mathieu albino

Edit:
Parachute a écrit:Ben oué, mais je sais plus cmt faire pour ...
et même pas avec google?


Nop, google n'était pas mon amis ce soir là!
avatar
parachute
CI recyclé

Nombre de messages : 4747
Age : 30
Cercle : C(E)I
Année Baptême : 07
Date d'inscription : 05/10/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: td11 en java

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum