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

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

Marsh Posté le 28-05-2001 à 12:31:15    

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 !

Reply

Marsh Posté le 28-05-2001 à 12:31:15   

Reply

Marsh Posté le 28-05-2001 à 13:32:40    

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

Reply

Marsh Posté le 28-05-2001 à 13:35:21    

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

Reply

Marsh Posté le 28-05-2001 à 13:38:52    

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

Reply

Marsh Posté le 28-05-2001 à 13:49:47    

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"
Reply

Marsh Posté le 28-05-2001 à 15:09:28    

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

Reply

Marsh Posté le 28-05-2001 à 15:10:12    

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)

Reply

Marsh Posté le 28-05-2001 à 16:53:56    

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 ?)

Reply

Marsh Posté le 29-05-2001 à 10:32:37    

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.

Reply

Marsh Posté le 29-05-2001 à 10:39:33    

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

Reply

Marsh Posté le 29-05-2001 à 10:39:33   

Reply

Marsh Posté le 29-05-2001 à 12:57:03    

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...).

Reply

Marsh Posté le 29-05-2001 à 13:02:45    

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...

Reply

Marsh Posté le 30-05-2001 à 03:47:17    

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]

Reply

Marsh Posté le 30-05-2001 à 08:35:28    

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
Reply

Marsh Posté le 30-05-2001 à 16:10:05    

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


---------------
Le site de ma maman
Reply

Marsh Posté le 31-05-2001 à 08:57:28    

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

Reply

Marsh Posté le 31-05-2001 à 09:44:52    

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
Reply

Marsh Posté le 31-05-2001 à 10:03:52    

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"
Reply

Marsh Posté le 31-05-2001 à 10:37:03    

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

Reply

Marsh Posté le 31-05-2001 à 12:13:43    

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

Reply

Marsh Posté le 31-05-2001 à 13:19:44    

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


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
Reply

Marsh Posté le 31-05-2001 à 13:39:16    

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"
Reply

Marsh Posté le 31-05-2001 à 14:22:19    

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...

Reply

Marsh Posté le 31-05-2001 à 16:06:34    

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 ?

Reply

Marsh Posté le 31-05-2001 à 16:15:38    

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"
Reply

Marsh Posté le 31-05-2001 à 16:23:19    

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."

Reply

Marsh Posté le 31-05-2001 à 16:47:36    

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"
Reply

Marsh Posté le 31-05-2001 à 18:51:38    

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

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

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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