Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
962 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [java] pb de methode get

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[java] pb de methode get

n°1558893
flora806
Posté le 11-05-2007 à 14:23:23  profilanswer
 

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

mood
Publicité
Posté le 11-05-2007 à 14:23:23  profilanswer
 

n°1558902
yaltar
Posté le 11-05-2007 à 14:30:12  profilanswer
 

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
n°1558930
flora806
Posté le 11-05-2007 à 14:57:50  profilanswer
 

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;
    }

n°1558964
yaltar
Posté le 11-05-2007 à 15:24:51  profilanswer
 

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

n°1558981
flora806
Posté le 11-05-2007 à 15:45:53  profilanswer
 

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.

n°1558986
yaltar
Posté le 11-05-2007 à 15:51:06  profilanswer
 

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

n°1559118
flora806
Posté le 11-05-2007 à 18:44:17  profilanswer
 

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?

n°1559158
did-54
Posté le 11-05-2007 à 20:17:25  profilanswer
 

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
n°1560063
flora806
Posté le 14-05-2007 à 13:47:06  profilanswer
 

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 :(

n°1560124
yaltar
Posté le 14-05-2007 à 14:41:05  profilanswer
 

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

mood
Publicité
Posté le 14-05-2007 à 14:41:05  profilanswer
 

n°1560125
flora806
Posté le 14-05-2007 à 14:45:29  profilanswer
 

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

n°1560169
yaltar
Posté le 14-05-2007 à 15:17:36  profilanswer
 

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

n°1560221
flora806
Posté le 14-05-2007 à 15:59:49  profilanswer
 

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;
         
    }
       

n°1560251
yaltar
Posté le 14-05-2007 à 16:28:30  profilanswer
 

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
n°1560266
flora806
Posté le 14-05-2007 à 16:39:11  profilanswer
 

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.

n°1560335
yaltar
Posté le 14-05-2007 à 17:43:21  profilanswer
 

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

n°1560360
flora806
Posté le 14-05-2007 à 18:02:09  profilanswer
 

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.

n°1560363
yaltar
Posté le 14-05-2007 à 18:07:14  profilanswer
 

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

n°1560366
flora806
Posté le 14-05-2007 à 18:12:31  profilanswer
 

Netbeans..

n°1560368
yaltar
Posté le 14-05-2007 à 18:17:57  profilanswer
 

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
n°1560371
flora806
Posté le 14-05-2007 à 18:25:01  profilanswer
 

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?

n°1560373
yaltar
Posté le 14-05-2007 à 18:27:43  profilanswer
 

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());

n°1560378
flora806
Posté le 14-05-2007 à 18:36:00  profilanswer
 

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)

n°1560401
yaltar
Posté le 14-05-2007 à 19:34:23  profilanswer
 

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

n°1560514
flora806
Posté le 15-05-2007 à 10:49:02  profilanswer
 

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.

n°1560692
yaltar
Posté le 15-05-2007 à 15:14:17  profilanswer
 

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

n°1560727
flora806
Posté le 15-05-2007 à 15:55:30  profilanswer
 

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

n°1561245
yaltar
Posté le 16-05-2007 à 15:27:36  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [java] pb de methode get

 

Sujets relatifs
[résolu]Java:Appliquer une methode héritée sur un objetMéthode pour contribuer a un projet Java
[JAVA] Attendre la fin d'une methode avant de demarrer une autre[JAVA] [recherche méthode] Object <-> [ ] byte
[Hibernate]Filtrer une requete avec une methode javaInternationalisation en java ... bonne méthode ?
[Java - Servlet] Methode Init() non executee[JAVA] Comment laisser tourner une méthode en arrière plan ?
[JAVA] méthode toStringJava , comment acceder a une methode d un objet y a un pitit pb.
Plus de sujets relatifs à : [java] pb de methode get


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR