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

  FORUM HardWare.fr
  Programmation

  [JAVA] à quoi ça sert que je me casse le cul à écrire des méthodes...

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JAVA] à quoi ça sert que je me casse le cul à écrire des méthodes...

n°34756
Cherrytree
cn=?
Posté le 28-05-2001 à 12:31:15  profilanswer
 

Bon, voilà j'ai fait un beau fichier avec plein de méthodes public parce que je débutte et j'ai un gros pépin.
 
Quand je compile il me dit ça :
 
SchemaReaderMain.java [330:1] Can't make static reference to method public int countPrim(File) in class SchemaReaderMain.
                int nb = countPrim(in);
                         ^
SchemaReaderMain.java [330:1] Cannot parse initializer
                int nb = countPrim(in);
                         ^
SchemaReaderMain.java [331:1] Can't make static reference to method private int countList(File) in class SchemaReaderMain.
                int nl = countList(in);
                         ^
SchemaReaderMain.java [331:1] Cannot parse initializer
                int nl = countList(in);
                         ^
SchemaReaderMain.java [333:1] Can't make static reference to method public PrimitiveObj[] readPrimitive(File) in class SchemaReaderMain.
                primitiveObj = readPrimitive(in);
                               ^
5 errors

 
Alors quoi que je fais moi !

mood
Publicité
Posté le 28-05-2001 à 12:31:15  profilanswer
 

n°34776
DuffBeer
Posté le 28-05-2001 à 13:32:40  profilanswer
 

Si tu pouvais mettre le code de la classe SchemaReaderMain ou la partie de code (lignes 33x) qui plante.

n°34781
BENB
100% Lux.
Posté le 28-05-2001 à 13:35:21  profilanswer
 

A mon humble avis tu as oublier de mentionner la classe a laquelle tu aplliques ces methodes...

n°34784
DuffBeer
Posté le 28-05-2001 à 13:38:52  profilanswer
 

BENB> C'est ce que j'ai pensé au premier abord, mais j'attend de voir son code.

n°34794
wouatouwou​atou
Posté le 28-05-2001 à 13:49:47  profilanswer
 

moi je pense plutot ke tes methodes (ki doivent etre statiques) font appelle a des truc non statiques :D
Bref, en clair, tu fais appelle a des trucs pas statiques et ki devraient l'etre...


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°34831
under
(avec u comme under)
Posté le 28-05-2001 à 15:09:28  profilanswer
 

chui d'accord avec wouatouwouatou  (voila une reponse qu'elle etait utile)
a tout hasard, t'as pas mis ta

n°34832
under
(avec u comme under)
Posté le 28-05-2001 à 15:10:12  profilanswer
 

chui d'accord avec wouatouwouatou  (voila une reponse qu'elle etait utile)
a tout hasard, t'as pas mis ta méthode countPrim en static dans ta classe? moi ca m'etonnerais po...
si c le cas, met int nb= NomClasse.countPrim(in)

n°34876
airbag
There's no life before coffee
Posté le 28-05-2001 à 16:53:56  profilanswer
 

Dans ton cas, countPrim() n'est pas accessible depuis ta classe où tu l'utilise; si par exemple c'est une méthode de la classe UnTruc essaie :
int leNb = UnTruc.countPrim(in);
 
Si par contre countPrim est un objet et que tu fais appel à son contructeur (pour instancier un nouvel objet) il faut faire :
int leNb= new ( countPrim());
 
essaie la doc Sun, y a toutes les méthodes de décrites pour toutes les classes de chaque package. (la classe SchemaReaderMain est de ta conception ?)

n°35092
Cherrytree
cn=?
Posté le 29-05-2001 à 10:32:37  profilanswer
 

Voilà le code source incriminé :
 
import java.io.*;
 
public class SchemaReaderMain {
 public File inputFile;
 
 public SchemaReaderMain(File inputFile) {
  this.inputFile = inputFile;
 }
 
 public int countPrim(File inputFile) {
  int nbPrim = 0;
  try {
   BufferedReader input = new BufferedReader(new FileReader(inputFile));
   String s = new String();
   while ((s = input.readLine()) != null) {
    if(s.startsWith("<primitive>" ))
     nbPrim++;
   }
   input.close();
  }
  catch (java.io.IOException e) {
   System.err.println("Caught IOException: " + e.getMessage());
  }
  return nbPrim;
 }
 
 private int countList(File inputFile) {
  int maxList = 0;
  try {
   int nbPrim = countPrim(inputFile);
   int[] nbList = new int[nbPrim];
   for(int i = 0; i < nbPrim; i++)
    nbList[i] = 0;
   int i = 0;
   BufferedReader input = new BufferedReader(new FileReader(inputFile));
   String s = new String();
   while ((s = input.readLine()) != null) {
    if(s.startsWith("<list>" ))
     nbList[i]++;
    if(s.startsWith("</primitive>" ))
     i++;
   }
   input.close();
   for(i = 0; i < nbPrim; i++)
    if(nbList[i] > maxList)
     maxList = nbList[i];
  }
  catch (java.io.IOException e) {
   System.err.println("Caught IOException: " + e.getMessage());
  }
  return maxList;
 }
 
 public PrimitiveObj[] readPrimitive(File inputFile) {
  int nbPrim = countPrim(inputFile);
  PrimitiveObj[] primitiveObj = new PrimitiveObj[nbPrim];
  String primName = new String();
  int nbList = countList(inputFile);
  String[] primList = new String[nbList];
  try {
   int i = 0;
   int j = 0;
   BufferedReader input = new BufferedReader(new FileReader(inputFile));
   String s;
   while ((s = input.readLine()) != null) {
    if(s.startsWith("<p_name>" ))
     primName = s.substring(8, s.length()-9);
    if(s.startsWith("<p_list>" )) {
     primList[i] = s.substring(8, s.length()-9);
      i++;
    }
    if(s.startsWith("</primitive>" )) {
     i = 0;
     primitiveObj[j] = new PrimitiveObj(primName, primList);
     j++;
    }
   }
  }
  catch (java.io.IOException e) {
   System.err.println("Caught IOException: " + e.getMessage());
  }
  return primitiveObj;
 }
 
 public static void main(String[] args) {
  File in = new File("testread.xml" );
  int nb = countPrim(in);
                int nl = countList(in);
  PrimitiveObj[] primitiveObj = new PrimitiveObj[nb];
  primitiveObj = readPrimitive(in);
  for(int i = 0; i < nb; i++) {
   System.out.println(primitiveObj[i].primName);
   for(int j = 0; j < nl; j++) {
    System.out.println(primitiveObj[i].primList[j]);
   }
  }
        }
}

 
Bon, pour préciser un peu les choses, cette classe maison servira si elle marche un jour à lire un fichier xml, d'une forme assez complexe contenant des balises <p_name> et <p_list>.
Le but est de créer des objet PrimitiveObj à la lecture du document. Un objet PrimitiveObj ne contient que des données publiques :
String primName; : correspond à <p_name>
String[] primList; : correspond à <p_list>
 
Voilà, mon PC déconne un peu, donc je suis un peu long à la détente en ce moment.
 
Les erreurs de compilations que j'ai eu sont incompréhensible pour moi : je ne les ai jamais eu, et comme je débute, je n'ai pas le recul suffisant.

n°35097
BENB
100% Lux.
Posté le 29-05-2001 à 10:39:33  profilanswer
 

ben dans ton main il manque la creation d'une classe
toto SchemaReaderMain(in);
et apres
toto.count....

mood
Publicité
Posté le 29-05-2001 à 10:39:33  profilanswer
 

n°35176
Cherrytree
cn=?
Posté le 29-05-2001 à 12:57:03  profilanswer
 

Bon sang, j'ai l'impression d'être encore plus con que d'habitude. Faut pas m'en vouloir, mon truc c'est gcc et le langage C. Alors Java en autoformation c'est un peu galère.
 
Tu dis qu'il faut que je crée un objet du type SchemaReaderMain et que je lui applique les méthodes que j'ai créée. Tu peux me montrer (me prendre par la main...).

n°35180
BENB
100% Lux.
Posté le 29-05-2001 à 13:02:45  profilanswer
 

public static void main(String[] args)  
{  
  File in = new File("testread.xml" );  
  SchemaReaderMain toto(in);
  int nb = countPrim(in);  
                int nl = toto.countList(in);  
  PrimitiveObj[] primitiveObj = new PrimitiveObj[nb];  
  primitiveObj = toto.readPrimitive(in);  
  for(int i = 0; i < nb; i++) {  
   System.out.println(primitiveObj[i].primName);  
   for(int j = 0; j < nl; j++) {  
    System.out.println(primitiveObj[i].primList[j]);  
   }  
  }  
        }  
 
 
[#0000ff]
voila...

n°35440
BifaceMcLe​OD
The HighGlandeur
Posté le 30-05-2001 à 03:47:17  profilanswer
 

Sinon, autre possibilité (qui se rapproche de C) : tu définis tes méthodes comme statiques. Dans ce cas, tu n'as plus à appliquer ta méthode sur un objet, car il n'y a pas de this quand tu es dans la méthode.
 
Question bête : dans ta méthode countPrim(), quel est l'intérêt de passer ton objet File en paramètre, puisque tu l'as déjà : ben oui, il est déjà dans this.inputFile. Même question pour les méthodes countList() et readPrimitive().
D'ailleurs, javac devrait te signaler (en tant que warning) que dans ces 3 méthodes, tu définis un paramètre inputStream qui masque l'attribut du même nom.

 

[edit]--Message édité par BifaceMcLeOD--[/edit]

n°35446
Cherrytree
cn=?
Posté le 30-05-2001 à 08:35:28  profilanswer
 

Merci beaucoup, maintenant ça compile impécable ! C'est un peu poussé je sais, mais je vais quand même abuser de votre générosité : le compilo (par l'entremise de Forte CE) me renvoie Caught IOException: testread.xml (le fichier spécifié est introuvable)
 
Bon, pour tout dire, j'ai placé ledit fichier dans le même répertoire que les fichiers class. Peut-être que ce n'est pas ça que je dois faire...


---------------
Le site de ma maman
n°35674
Cherrytree
cn=?
Posté le 30-05-2001 à 16:10:05  profilanswer
 

Je suis là dessus depuis ce matin, je ne trouve pas. A l'aide !


---------------
Le site de ma maman
n°35880
prettysmil​e
Sourire est un devoir social
Posté le 31-05-2001 à 08:57:28  profilanswer
 

:(  :(  :( Je trouve pô.  :(  :(  :(

n°35889
Cherrytree
cn=?
Posté le 31-05-2001 à 09:44:52  profilanswer
 

J'ai essayé le debugger de Forte, j'ai posé des breakpoints aux endroits critiques, mais là, vraiment je ne vois pas ce qui dérange. J'ai vraiment besoin d'aide ici.
 
Le didacticiel de java.sun.com est certes bien fait, mais il ne gère pas des cas aussi dense.
 
Si qqn sait, enfin bref, vous savez...
 
Merci


---------------
Le site de ma maman
n°35895
wouatouwou​atou
Posté le 31-05-2001 à 10:03:52  profilanswer
 

En fait, jsais pas trop ce kes ton fichier ni koment tu y accede... mais bon.. Essaie de mettre ton fichier dans le repertoire ou se trouve l'exe de ton compilo...


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°35912
Cherrytree
cn=?
Posté le 31-05-2001 à 10:37:03  profilanswer
 

Pas con ça, j'avais pas pensé. Pour l'instant j'ai testé dans le répertoire de l'appli et C:\
 
En faisant ça et avec le code minimal suivant (j'ai renommé la classe pour les besoins du compilateur), ça ne marche pas je me prends toujours une Caught IOException: testread.xml (le fichier spécifié est introuvable) dans la face.
 
Voilà le code minimal que je cherche à faire marcher :
import java.io.*;
 
public class SchemaReaderTest {
 public File inputFile;
 
 public SchemaReaderTest(File inputFile) {
  this.inputFile = inputFile;
 }
 
 public int countPrim(File inputFile) {
  int nbPrim = 0;
  try {
   BufferedReader input = new BufferedReader(new FileReader(inputFile));
   String s = new String();
   while ((s = input.readLine()) != null) {
    if(s.startsWith("<primitive>" ))
     nbPrim++;
   }
   input.close();
  }
  catch (java.io.IOException e) {
   System.err.println("Caught IOException: " + e.getMessage());
  }
  return nbPrim;
 }
 
 public static void main(String[] args) {
  File in = new File("exempleaude.xml" );
  SchemaReaderTest schemaReader = new SchemaReaderTest(in);
                int nb = schemaReader.countPrim(in);
  System.out.println("nb = " + nb);
        }
}

 
Merci beaucoup

n°35990
prettysmil​e
Sourire est un devoir social
Posté le 31-05-2001 à 12:13:43  profilanswer
 

[JAVA] à quoi ça sert que je me casse le cul à écrire des méthodes...
ben à passer le temps...

n°36011
wouatouwou​atou
Posté le 31-05-2001 à 13:19:44  profilanswer
 

t'appelles ca un code minimal ??!! :D


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°36019
wouatouwou​atou
Posté le 31-05-2001 à 13:39:16  profilanswer
 

au fait, ta pa du lire le post de mcleod... :D tes methodes, elles ont pas besoin du parametre...
 

Code :
  1. import java.io.*;
  2. public class SchemaReaderTest {
  3. public File inputFile;
  4.  
  5. public SchemaReaderTest(File inputFile) throws Exception {
  6.   if (inputFile==null)
  7.   {
  8.     throw new Exception("parametre du constructeur null" );
  9.   }
  10.  
  11.   this.inputFile = inputFile;
  12. }
  13.  
  14. public int countPrim() {
  15.   int nbPrim = 0;
  16.   BufferedReader buff_input = null;
  17.   try
  18.   {
  19.     buff_input = new BufferedReader(new FileReader(inputFile));
  20.     String s = new String();
  21.     while ((s = buff_input.readLine()) != null) {
  22.       if(s.startsWith("<primitive>" ))
  23.        nbPrim++;
  24.     }
  25.   }
  26.   catch (java.io.IOException e)
  27.   {
  28.     e.printStackTrace();
  29.     System.err.println("countPrim() - Caught IOException: " + e.getMessage());
  30.   }
  31.   if ( buff_input != null )
  32.     buff_input.close();
  33.   return nbPrim;
  34. }
  35.   public static void main(String[] args)
  36.   {
  37.     String nom_fichier = "exempleaude.xml";
  38.     File in = new File(nom_fichier);
  39.     if ( in.exists() )
  40.     {
  41.      
  42.       try
  43.       {
  44.         SchemaReaderTest schemaReader = new SchemaReaderTest(in);
  45.         int nb = schemaReader.countPrim();
  46.         System.out.println("nb = " + nb);
  47.       }
  48.       catch (Exception e)
  49.       {
  50.          e.printStackTrace();
  51.          System.err.println(e.getMessage());
  52.       }
  53.     }
  54.     else
  55.       System.out.println("fichier " + nom_fichier + "  introuvable" );
  56.   }
  57. }


 
Essaie ca... j'ai modifié ton code ( minimal :D )...pi dis moi si ca marche :)

 

[edit]--Message édité par wouatouwouatou--[/edit]


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°36030
Cherrytree
cn=?
Posté le 31-05-2001 à 14:22:19  profilanswer
 

Merci beaucoup, je n'ai pas encore testé ton source mais déjà il me montre que je ne suis pas encore un bon programmeur. Je teste ça et je te dis...

n°36114
Cherrytree
cn=?
Posté le 31-05-2001 à 16:06:34  profilanswer
 

Heu, y'a un truc que le compilo n'aime pas dans ton source :
 
SchemaReader.java [30:1] Exception java.io.IOException thrown from close must be caught, or it must be declared in the throws clause of this method
                        input.close();
                              ^

La ligne indiquée ne veut rien dire, car j'ai modifié le fichier en profondeur. Cela dit il y a un truc que je n'arrive pas à faire parce que le compilo me dit qu'il se peut que mon objet ne soit pas initialisé :
 
SchemaReader.java [79:1] Variable primitiveList may not have been initialized.
                                        primitiveList[i][j] = s.substring(8, s.length()-9);
                                        ^

 
Le truc c'est que je mesure exactement avec mes fameuses méthodes la taille exacte des mes listes et ensuite je me sers de ces valeurs en initialisation. Une idée ?

n°36117
wouatouwou​atou
Posté le 31-05-2001 à 16:15:38  profilanswer
 

jai pas de koi tester ca... :D
mais pour le close... rajoute un try catch dans le if...  
quant a ton primitive ...truc... je le voit pas... dsl :D
Mais l'erreur signifie ke tu dois l'initialiser avant de lutiliser...


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°36121
Cherrytree
cn=?
Posté le 31-05-2001 à 16:23:19  profilanswer
 

OK pour le close, j'en suis capable.
 
Je cherche sur le coup de l'init, mais y'a pas un moyen de dire au compilo : "t'occupes, j'ai pensé à ta place."

n°36136
wouatouwou​atou
Posté le 31-05-2001 à 16:47:36  profilanswer
 

Si ta ce message.. c ke tu risque de lutiliser avant de l'initialiser.. donc, ta interet a linitialiser avant !!!!
Mais si ta absolument besoin... lors de ta declaration, tu le met egal a null...

Code :
  1. String primitiveTruc[][]=null;


ou encore :  

Code :
  1. String primitiveTruc[][]= new String[12][12];


 
mais bon.. jsuis pas sur de la syntaxe... :D


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°36224
BifaceMcLe​OD
The HighGlandeur
Posté le 31-05-2001 à 18:51:38  profilanswer
 

Effectivement, le diagnostic de wouatouwouatou est correct, il faut que tu initialises ta variable quand tu la déclares :

Code :
  1. String[][] primitiveList = null;

mood
Publicité
Posté le   profilanswer
 


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

  [JAVA] à quoi ça sert que je me casse le cul à écrire des méthodes...

 

Sujets relatifs
[java] sous classe[JAVA] Incompatiblités . . .
[JAVA] Comment créer un nouveau curseur ?[java] recherche des exercices sur les portées
[JS] Est ce qu'on peut écrire dans un fichier en Javascript ?[ASP] est-ce possible d'écrire dans une table si on utilise une
[Java] Problème de synchronisation sur des servlets.Question aux programmeurs JAVA... a propos de GEF...
[JAVA] decoupage d'un projet en plusieurs fichiersPb d'import en Java .......
Plus de sujets relatifs à : [JAVA] à quoi ça sert que je me casse le cul à écrire des méthodes...


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