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

 


Dernière réponse
Sujet : [JAVA] à quoi ça sert que je me casse le cul à écrire des méthodes...
BifaceMcLeOD Effectivement, le diagnostic de wouatouwouatou est correct, il faut que tu initialises ta variable quand tu la déclares :

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


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


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

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

wouatouwouatou 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

Cherrytree 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."
wouatouwouatou 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...
Cherrytree 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 ?
Cherrytree 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...
wouatouwouatou 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]

wouatouwouatou t'appelles ca un code minimal ??!! :D
prettysmile [JAVA] à quoi ça sert que je me casse le cul à écrire des méthodes...
ben à passer le temps...
Cherrytree 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
wouatouwouatou 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...
Cherrytree 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
prettysmile :(  :(  :( Je trouve pô.  :(  :(  :(
Cherrytree Je suis là dessus depuis ce matin, je ne trouve pas. A l'aide !
Cherrytree 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...
BifaceMcLeOD 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]

BENB 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...
Cherrytree 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...).
BENB ben dans ton main il manque la creation d'une classe
toto SchemaReaderMain(in);
et apres
toto.count....
Cherrytree 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.
airbag 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 ?)
under 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)
under chui d'accord avec wouatouwouatou  (voila une reponse qu'elle etait utile)
a tout hasard, t'as pas mis ta
wouatouwouatou 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...
DuffBeer BENB> C'est ce que j'ai pensé au premier abord, mais j'attend de voir son code.
BENB A mon humble avis tu as oublier de mentionner la classe a laquelle tu aplliques ces methodes...
DuffBeer Si tu pouvais mettre le code de la classe SchemaReaderMain ou la partie de code (lignes 33x) qui plante.
Cherrytree 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 !

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