pb de methode get [java] - Java - Programmation
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
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;
}
Marsh Posté le 11-05-2007 à 15:24:51
ReplyMarsh 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.
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
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?
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
edit : en effet, je dis une connerie S'pratique ce truc
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
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 ...
Marsh Posté le 14-05-2007 à 14:45:29
tu penses que je dois rajouter un "system.out.println("Résultat:" + Corr)"
par exemple?
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
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;
}
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 ?
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.
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){
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.
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
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?
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());
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)
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());
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.
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?
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());
Marsh Posté le 16-05-2007 à 15:27:36
Tu as biens choisis un fichier quand la selection de fichier c'est ouverte ?
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