[java] pb de methode get

pb de methode get [java] - Java - Programmation

Marsh Posté le 11-05-2007 à 14:23:23    

Bonjour,
j'ai besoin de lire un fichier texte qui est ss forme de "Id|age|sexe|profession|CP"
par la suite il s'agit de calculer des indicateurs à partir de l'age, le sexe et le CP
--> Indicateur "Corr"
le calcul se fait apr exp pour l'utilisateur N°1 avec chacun des autres utilisateurs et j'ai besoin après d'afficher et de stocker le résultat trouvé pour chaque ligne.
 
j'ai inséré le code ci-dessous et j'ai une erreur avec la méthode getAge() au niveau de la ligne: "int Age_u = object.getAge();"
 
 
public class MyObject {
     
      public MyObject() {
    }
     
    public double Corr_demog(String filePath) throws IOException {
        double Corr = 0.0;
     
        // Creation d'un scanner pour lire le fichier
        Scanner scanner = new Scanner(new File(filePath)).useDelimiter("|" );
     
        // La liste des objets lus dans le fichier
        List<MyObject> data = new ArrayList<MyObject>();
 
        while (scanner.hasNext()) {
            // Creation d'un nouvel objet
        MyObject myObject = new MyObject();
 
      // Valorisation des champ de l'objet
      int id = scanner.nextInt();
      int Age = scanner.nextInt();  
      int Sexe = scanner.nextInt();
      String Profession = scanner.next();
      int Nat = scanner.nextInt();
       
      //myObject.setId(scanner.nextInt());
      //myObject.setAge(scanner.nextInt());
      //myObject.setSexe(scanner.nextInt());
      //myObject.setProfession(scanner.next());
      //myObject.setNat(scanner.nextInt());
 
      // Ajout de l'objet à la liste
      data.add(myObject);
    }
 
    // Pour chaque objet  
    for (MyObject object : data) {
 
             
      double Age_au = 0.0;
      double Sexe_au = 0.0;
      double Nat_au = 0.0;
 
      int Sex_a = 0;
      int Sex_u = 0;
      int Nat_a = 0;
      int Nat_u = 0;
 
      int Age_a = 0;
      int Age_u = object.getAge();
 
      Corr = (Age_au + Sexe_au + Nat_au) / 3;
 
      Age_au = 40 - Math.abs(Age_a - Age_u) / 20;
      if (Sex_a == Sex_u) {
        Sexe_au = 1.0;
      } else
        Sexe_au = 0.1;
 
      if (Nat_a == Nat_u) {
        Nat_au = 2;
      }  
      else
        Nat_au = 0.1;
 
    return Corr;
    }
 
     
}
}
---------------------
je suis encore une débutante, j'ai besoin de l'aide svp:whistle:  
merciii

Reply

Marsh Posté le 11-05-2007 à 14:23:23   

Reply

Marsh Posté le 11-05-2007 à 14:30:12    

Bonjour,
il semble tout simplement que la méthode getAge(),  n'existe pas sur MyObject.
 
public int getAge() {
return age;
}

 
et bien sur il faut un attribut age sur myObject ;
public class MyObject {  
 private int age;
 
 
et une méthode pour mettre à jour l'age de MyyObject :
public void setAge(int unAge){
  this.age = unAge;
}

 
et utiliser celan dans la boucle de lecture des données des fichiers :
     // Creation d'un nouvel objet  
        MyObject myObject = new MyObject();  
   
      // Valorisation des champ de l'objet  
      int id = scanner.nextInt();  
 
      myObject.setAge( scanner.nextInt());  
 
      int Sexe = scanner.nextInt();  
      String Profession = scanner.next();  
      int Nat = scanner.nextInt();  
 
 
 
Voila, pour faire simple, la Classe MYObject, n'a pas d'attribut, le fait d'écrire :
  int Age = scanner.nextInt();  
crée une variable locale de type int, dans la méthode  public double Corr_demog(String filePath) throws IOException  
 
Voila,
bien sur il faut faire cela pour tous les 'attributs' :
      int id  
      int Sexe  
      String Profession  
      int Nat


Message édité par yaltar le 11-05-2007 à 14:31:26
Reply

Marsh Posté le 11-05-2007 à 14:57:50    

Merci pour la réponse,
j'ai rajouté les attributs de la classe et là j'ai plus de souci avec la méthode getAge().
par contre j'ai un "return" qui manque apparment comme la méthode Corr_demog:
"public double Corr_demog(String filePath) throws IOException "  
doit retourner un résultat.
pourtant j'ai bien mis à la fin un return Corr.
je comprends pas pourquoi ça marche pas encore.
------------
public double Corr_demog(String filePath) throws IOException {
        double Corr = 0.0;
     
        // Creation d'un scanner pour lire le fichier
        Scanner scanner = new Scanner(new File(filePath)).useDelimiter("|" );
     
        // La liste des objets lus dans le fichier
        List<MyObject> data = new ArrayList<MyObject>();
 
        while (scanner.hasNext()) {
            // Creation d'un nouvel objet
        MyObject myObject = new MyObject();
 
      // Valorisation des champ de l'objet
      int id = scanner.nextInt();
      int Age = scanner.nextInt();  
      int Sexe = scanner.nextInt();
      String Profession = scanner.next();
      int Nat = scanner.nextInt();
       
      // Ajout de l'objet à la liste
      data.add(myObject);
    }
 
    // Pour chaque objet  
    for (MyObject object : data) {
     
      double Age_au = 0.0;
      double Sexe_au = 0.0;
      double Nat_au = 0.0;
 
      int Sex_a = 0;
      int Sex_u = 0;
      int Nat_a = 0;
      int Nat_u = 0;
 
      int Age_a = 0;
      int Age_u = object.getAge();
 
      Corr = (Age_au + Sexe_au + Nat_au) / 3;
 
      Age_au = 40 - Math.abs(Age_a - Age_u) / 20;
      if (Sex_a == Sex_u)  
      {
        Sexe_au = 1.0;
      }  
      else
        Sexe_au = 0.1;
 
      if (Nat_a == Nat_u) {
        Nat_au = 2;
      }  
      else
        Nat_au = 0.1;
 
      return Corr;
    }

Reply

Marsh Posté le 11-05-2007 à 15:24:51    

Oui ton retrun ce trouve dans la boucle for, il faut le sortir de la boucle

Reply

Marsh Posté le 11-05-2007 à 15:45:53    

yaltar a écrit :

Oui ton retrun ce trouve dans la boucle for, il faut le sortir de la boucle


 
 
Oui, tout à fait, j'avais pas fait attention, c'était ça justement ;)  
merci.

Reply

Marsh Posté le 11-05-2007 à 15:51:06    

Tant mieux si j'ai pu aider et que tu n'es plus bloquée.
Ceci étant je me permet une petite remarque, j'ai l'impression qu'il te manque des bases de POO. Je te conseille de te pencher un peu dessus avant de continuer, ça te permettra d'être un peu plus à l'aise pour la suite.
 
Bon courage

Reply

Marsh Posté le 11-05-2007 à 18:44:17    

là au niveau de la compilation, tout marche bien, mais au niveau du résultat j'ai rien en output, je ne comprends pas...
c'est possible d'avoir par exp le résultat calculé dans un fichier txt?

Reply

Marsh Posté le 11-05-2007 à 20:17:25    

Scanner scanner = new Scanner(new File(filePath)).useDelimiter("|" );  
 
je connais pas le useDelimiter parceque je n'ai jamais utilisé de Scanner, mais comme ca, ca me semble être le délimiteur du path plutôt, non ?
 
P'tetre que dis une connerie plus grosse que moi aussi :D
 
edit : en effet, je dis une connerie :D S'pratique ce truc :o


Message édité par did-54 le 11-05-2007 à 20:20:03
Reply

Marsh Posté le 14-05-2007 à 13:47:06    

oui je pense que "Scanner scanner = new Scanner(new File(filePath)).useDelimiter("|" ); " ne pose pas de problème, par contre je ne comprends tjr pas pourquoi j'ai pas d'output :(

Reply

Marsh Posté le 14-05-2007 à 14:41:05    

Je ne vois rien dans ce code qui fasse un output, ce qui explique qu'il n'y en ai pas ... :(

Reply

Marsh Posté le 14-05-2007 à 14:41:05   

Reply

Marsh Posté le 14-05-2007 à 14:45:29    

tu penses que je dois rajouter un "system.out.println("Résultat:" + Corr)"
par exemple?

Reply

Marsh Posté le 14-05-2007 à 15:17:36    

oui ce serait une première étape pour voir quelque  chose dans la console
 
Ps  : System, et pas system :)

Reply

Marsh Posté le 14-05-2007 à 15:59:49    

oui, c'est vrai, même avec System, ça marche pas:((
je galère tjr...en fait j'ai l'impression que le code ne s'exécute pas convenablement, y a des déclarations qui manquent il me semble.
je vais rappler ce que je voulais faire:
le fichier txt:
id|age|sexe|profession|CP
je veux calculer des indices de similarités pour les attributs: age, sexe et CP(Nat) entre utilisateurs
l'algo se présente comme ça: Corr = age au+ sexe au + Nat au/3
age au = 40 +|age a - age u|/20
sexe au        = 1 si sex a = sex u
        ou       = 0 si sex a # sex u  
nat au      = 2 si nat a = nat u
        ou   = 0 si nat a # nat u  
 
j'ai considéré que je vais comparer l'user N°1 avec l'ensemble des users restants.
user N°1---> Age=24 , sexe = M , Nat = 87711
 
ce qui me pose un peu prb, c que pour les attributs Sexe et Nat, sur le fichier texte c'est des string, par contre en algo, ça devient des int.
qqu pourrait me conseiller? je ss débutante et j'arrive pas à m'en sortir:(
----
 
public class MyObject  
        {
  private int id;
  private int age;
  private int sexe;
  private String profession;
  private int nat;
  private String filePath;
                private String File;
               
  /**
   * Constructeur de la classe MyObject.
   */
  public MyObject() {
   super();
  }
 
                public MyObject(File fichier) throws IOException {
  super();
  this.filePath = fichier.getPath();
   
                }
                 
             
                     
                 
  public int getAge() {
   return age;
  }
 
  public void setAge(int age) {
   this.age = age;
  }
 
  public int getId() {
   return id;
  }
 
  public void setId(int id) {
   this.id = id;
  }
 
  public int getNat() {
   return nat;
  }
 
  public void setNat(int nat) {
   this.nat = nat;
  }
 
  public String getProfession() {
   return profession;
  }
 
  public void setProfession(String profession) {
   this.profession = profession;
  }
 
  public int getSexe() {
   return sexe;
  }
 
  public void setSexe(int sexe) {
   this.sexe = sexe;
  }
                 
   
                 
    public double Corr_demog(String filePath) throws IOException {
        double Corr = 0.0;
     
        //this.filePath = fichier.getPath();
 //parseFile();
         
        // Creation d'un scanner pour lire le fichier
        Scanner scanner = new Scanner(new File(filePath)).useDelimiter("|" );
     
         
        // La liste des objets lus dans le fichier
        List<MyObject> data = new ArrayList<MyObject>();
 
        while (scanner.hasNext()) {
            // Creation d'un nouvel objet
        MyObject myObject = new MyObject();
 
      // Valorisation des champ de l'objet
      int id = scanner.nextInt();
      int Age = scanner.nextInt();  
      int Sexe = scanner.nextInt();
      String Profession = scanner.next();
      int Nat = scanner.nextInt();
       
            // Ajout de l'objet à la liste
      data.add(myObject);
    }
 
         
      double Age_au = 0.0;
      double Sexe_au = 0.0;
      double Nat_au = 0.0;
 
      int Sex_a = 0;
      String Sex_u = M;
      int Nat_a = 0;
      int Nat_u = 0;
 
      int Age_a = 24;
           
       
    // Pour chaque objet  
    for (MyObject object : data) {
       
      int Age_u = object.getAge();
      int Sexe_u = object.getSexe();
 
      Age_au = 40 - Math.abs(Age_a - Age_u) / 20;
       
          if (Sex_a == Sex_u) {
            Sexe_au = 1.0;
          } else
            Sexe_au = 0.1;
 
          if (Nat_a == Nat_u)  
              {
            Nat_au = 2;
              }  
          else
            Nat_au = 0.1;
 
      Corr = (Age_au + Sexe_au + Nat_au) / 3;
       
    }
   System.out.println("resultat :" +Corr);  
     
    return Corr;
         
    }
       

Reply

Marsh Posté le 14-05-2007 à 16:28:30    

Déjà il ya un petit soucis dans les lignes :  
 
      int id = scanner.nextInt();
      int Age = scanner.nextInt();  
      int Sexe = scanner.nextInt();
      String Profession = scanner.next();
      int Nat = scanner.nextInt();
 
ici ce devrait être :
      myObject.setId(scanner.nextInt());
      myObject.setAge(scanner.nextInt());  
      myObject.setSexe(scanner.nextInt());
      myObject.setProfession(scanner.next());
      myObject.setNat(scanner.nextInt());
 
 
Cela permet de mettre les données lues dans l'instance de l'objet que tu viens de créer.
 
 
Ensuite quand tu dis "j'ai l'impression que le code ne s'exécute pas convenablement, y a des déclarations qui manquent il me semble. "
Si il manquait des déclarations cela ne compilera pas tu aurais des erreurs.
 
Qu'es ce qu'il se passe quand tu essai d'éxecuter le code ?


Message édité par yaltar le 14-05-2007 à 16:30:37
Reply

Marsh Posté le 14-05-2007 à 16:39:11    

ah d'accord..je viens de remettre les set..
quand j'exécute le code, en fait l'application reste en cours d'exécution ("project running" ) et ça reste comme ça sans aucun résultat après.

Reply

Marsh Posté le 14-05-2007 à 17:43:21    

tu peux faire voir le code qui lance le programme ???  
La ou tu as la méthode :
public static void main (String[] args){

Reply

Marsh Posté le 14-05-2007 à 18:02:09    

oué, j'ai en fait 4 classes dans le project: main, interface,menufichier et demog.
je fais appel au fichier txt à partir d'une interface, c le main qui exécute cette interface, après je sélectionne mon fichier à charger et en principe je dois avoir ds une autre console le résultat des calculs. chose que je n'ai pas..
 
code:
 
classe main:
public class Main {
     
    /** Creates a new instance of Main */
    public Main() {
    }
     
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       
        InterfaceDemog application = new InterfaceDemog();
    }
     
}
-------------
classe interface:
 
public class InterfaceDemog extends JFrame implements ActionListener {
     
    private JMenuBar barreDeMenu;
    //private DemogData demogdata;
    private MyObject myobject;
     
    /** Creates a new instance of InterfaceDemog */
    public InterfaceDemog()  
     
    {
        super("Application" );
        this.barreDeMenu = new JMenuBar();
        this.barreDeMenu.add(new MenuFichier(this));
        this.setSize(this.getMaximumSize());  
        this.setJMenuBar(this.barreDeMenu);
        this.setVisible(true);
 
    }
     
    public void actionPerformed(ActionEvent e)    {
        if(("Ouvrir" ).equals(e.getActionCommand())){
            JFileChooser dialogue = new JFileChooser();
            int res = dialogue.showOpenDialog(this);
            if (res==JFileChooser.CANCEL_OPTION)
                return;
            try {
                  this.myobject = new MyObject(dialogue.getSelectedFile());
           //     this.fichierTextes = new FichierTextes(dialogue.getSelectedFile().getPath());
           //     this.fichierTextes.charger();
            }
            catch (Exception err)   {
                System.out.println("probleme : "+err);
            }
        }
        else   if(("Quitter" ).equals(e.getActionCommand())){
            try{
                System.exit(0);
            }
            catch(Exception ee){
                System.out.println("Impossible de quitter" );
            }    
        }
 
    }
----
j'ai une autre classe pour le menufichier de l'application, en + de la classe dont on parle depuis le début.

Reply

Marsh Posté le 14-05-2007 à 18:07:14    

Tu travailles à partir d'ou ? Eclipse  ? Jbuilder ??

Reply

Marsh Posté le 14-05-2007 à 18:12:31    

Netbeans..

Reply

Marsh Posté le 14-05-2007 à 18:17:57    

Tu dois avoir une console qui affiche ce qui se passe
 
[EDIT]
Je viens de voir que tu n'appelles jamais la méthode : Corr_demog
 
C'est elle qui fait le traitement mais tu ne l'appel pas


Message édité par yaltar le 14-05-2007 à 18:19:17
Reply

Marsh Posté le 14-05-2007 à 18:25:01    

oui j'ai bien une console qui affiche l'output.
je dois appeler cette méthode dans cette classe même? à quel niveau je dois faire appel?

Reply

Marsh Posté le 14-05-2007 à 18:27:43    

dans un premier temps je dirais juste en dessous de ca :  
            try {
                  this.myobject = new MyObject(dialogue.getSelectedFile());  
 
 
Je mettrais :  
this.myobject.Corr_demog(dialogue.getSelectedFile());

Reply

Marsh Posté le 14-05-2007 à 18:36:00    

je t'ai peut être embêté avec ttes mes questions, je te remercie pour tes réponses.
je viens de tester ce que tu viens de me dire concernant la méthode, y a une erreur: ça dit que Corr_demog (java.lang.string) dans Myobject cannot be applied to (java.io.file)

Reply

Marsh Posté le 14-05-2007 à 19:34:23    

Ha oui désolé, c'est une erreur de ma part .
 
C'estplutot ca :
this.myobject.Corr_demog(dialogue.getSelectedFile().getAbsolutePath());

Reply

Marsh Posté le 15-05-2007 à 10:49:02    

Merci.
je viens de tester :
this.myobject.Corr_demog(dialogue.getSelectedFile().getAbsolutePath());
il y a une exception de type: java.lang.NullPointerException
je pense que ça ne pointe pas vers le fichier.

Reply

Marsh Posté le 15-05-2007 à 15:14:17    

Tu peux me faire voir l'exception ? pour savoir à qu'elle ligne elle est provoquée?

Reply

Marsh Posté le 15-05-2007 à 15:55:30    

oui, l'exception " java.lang.NullPointerException" c'était sur:
 
this.myobject.Corr_demog(dialogue.getSelectedFile().getPath());

Reply

Marsh Posté le 16-05-2007 à 15:27:36    

Tu as biens choisis un fichier quand la selection de fichier c'est ouverte ?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed