Retourner valeurs tableau classe en java

Résolu/Fermé
montdorchaud Messages postés 13 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 21 mai 2010 - 8 août 2008 à 22:54
 Utilisateur anonyme - 19 déc. 2010 à 10:11
Bonjour,

je viens de débuter la programmation en java (il y a tout juste 24h). J'ai quelques base en fortran et en C mais je bute déjà sur quelques problèmes de taille. Je m'explique : je souhaite faire une classe dans laquelle j'ai une boucle qui lit toutes les lignes d'un fichier que l'on peut appeler par exemple toto.txt (pour faire original). Je voudrai retourner les valeurs de chaque ligne de mon fichier toto.txt dans une case d'un tableau qui se trouve dans mon programme principal. Comment faire?
De plus je sais comment lire du texte dans un fichier grâce à readline() mais je sais pas comment lire des nombres.

Je vous laisse un exemple de ma classe inachevée : (j'appelle ensuite la méthode readlign() depuis mon programme main() )

public class cFichiers {

static int readlign(String Nomfichier, int Numéroligne) {

FileReader monFichier = null;
BufferedReader tampon = null;
int i=1, tab[Numéroligne];

try {
monFichier = new FileReader(Nomfichier);
tampon = new BufferedReader(monFichier);


while (i<lect) {
// Lit une ligne de scores.txt
int ligne = tampon.readLine();
i++;
// Vérifie la fin de fichier
if (ligne == null)
break;
tab[i]=ligne;
} // Fin du while
}

catch (IOException exception) {
exception.printStackTrace();
}

finally {
try {
tampon.close();
monFichier.close();
}

catch(IOException exception1) {
exception1.printStackTrace();
}
}
}

}

Où et comment dois-je retourner les valeurs contenues dans tab? Et pourquoi ais-je une erreur à la ligne "int ligne = tampon.readLine();"?

J'espère avoir été assez clair.
Merci d'avance pour votre aide.
A voir également:

8 réponses

Utilisateur anonyme
19 déc. 2010 à 10:11
Salut khalida,

J'ai modifié légèrement le code de mondorchaud:
-le nom de la classe cFichiers >>>> CFichiers pour respecter les conventions d'écriture
-le nom du tableau tab[] >>>> scoresDuJoueur[] (c'est plus "parlant")
-pour que ce soit compilable, j'ai ajouté les imports

Le code proprement dit est strictement celui de mondorchaud (sauf l'ajout des imports)

   import java.io.FileReader;
   import java.io.BufferedReader;
   import java.io.IOException;
   
   public class CFichiers
   { 
   
   
      static int [] readlign(String Nomfichier, int Nombrelignes)
      { 
      
         FileReader monFichier = null; 
         BufferedReader tampon = null; 
         int scoresDuJoueur[]; 
         scoresDuJoueur = new int [Nombrelignes]; 
         int i=0; 
      
         try
         { 
            monFichier = new FileReader(Nomfichier); 
            tampon = new BufferedReader(monFichier); 
         
         
            while (i<Nombrelignes)
            { 
            // Lit une ligne de scores.txt 
               String ligne = tampon.readLine(); 
               try 
               { 
                  scoresDuJoueur[i] = Integer.parseInt(ligne); 
               } 
                  catch (NumberFormatException f) 
                  { 
                     System.err.println("Erreur! - Fichier de données non numérique -"); 
                  } 
            
               i++; 
            // Vérifie la fin de fichier 
               if (ligne == null)
               { 
                  if(i==Nombrelignes) 
                  { 
                     System.out.println("Lecture fichier terminée"); 
                     break; 
                  } 
                  else 
                     System.out.println("Erreur! - Problème lecture -"); 
               } 
            } // Fin du while 
         } 
         
            catch (IOException exception)
            { 
               exception.printStackTrace(); 
            } 
         
         finally
         { 
            try
            { 
               tampon.close(); 
               monFichier.close(); 
            } 
            
               catch(IOException exception1)
               { 
                 exception1.printStackTrace(); 
               } 
         } 
      
         return scoresDuJoueur; 
      
      } 
   
   }


Pour tester, il faut céer le fichier à lire (Scores.txt) par exemple avec le bloc note

La méthode readlign(String Nomfichier, int Nombrelignes) de la classe CFihiers étant static:
- Depuis la méthode main(...) du programme utilisateur (ou de toute autre méthode static) voici comment on récupère le tableau

String NomFic = "Scores2.txt";
int nombreScores = 10; // correspondant au nombre de lignes du fichier Scores2.txt
int[] scoresJoueur = new int[nombreScores];
          
         scoresJoueur = CFichiers.readlign(NomFic, nombreScores);
       
       //Le résultat:  
         for(int i = 0; i < scoresJoueur.length; i++)
            System.out.println("score" + (i +1) + ": \t" + scoresJoueur[i]);


Cordialement,

Dan
2
el_linwin Messages postés 521 Date d'inscription vendredi 25 juillet 2008 Statut Membre Dernière intervention 16 août 2008 90
9 août 2008 à 10:24
Bonjour montdorchaud,

C'est normal que vous ayez une erreur à la ligne: int ligne = tampon.readLine();
Car la méthode readLine(); renvoie un String, pas un int !

Il vous faudrait écrire:
String ligne = tampon.readLine();
et, si vous souhaitez récupérer un tableau de caractères:
Tablechar = ligne.toCharArray();
Tablechar ayant été défini par: char Tablechar[] = new char[la_longueur];


Cordialement,
el_linwin
1
montdorchaud Messages postés 13 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 21 mai 2010 4
12 août 2008 à 10:06
C'est bon j'ai résolu mon problème de tableau tout seul comme un grand.
En tout cas merci.

Pour ceux que ça intéresse je met à disposition le petit bout de programme :

public class cFichiers {


static int [] readlign(String Nomfichier, int Nombrelignes) {

FileReader monFichier = null;
BufferedReader tampon = null;
int tab[];
tab = new int [Nombrelignes];
int i=0;

try {
monFichier = new FileReader(Nomfichier);
tampon = new BufferedReader(monFichier);


while (i<Nombrelignes) {
// Lit une ligne de scores.txt
String ligne = tampon.readLine();
try
{
tab[i] = Integer.parseInt(ligne);
}
catch (NumberFormatException f)
{
System.err.println("Erreur! - Fichier de données non numérique -");
}

i++;
// Vérifie la fin de fichier
if (ligne == null){
if(i==Nombrelignes)
{
System.out.println("Lecture fichier terminée");
break;
}
else
System.out.println("Erreur! - Problème lecture -");
}
} // Fin du while
}

catch (IOException exception) {
exception.printStackTrace();
}

finally {
try {
tampon.close();
monFichier.close();
}

catch(IOException exception1) {
exception1.printStackTrace();
}
}

return tab;

}

}
1
montdorchaud Messages postés 13 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 21 mai 2010 4
11 août 2008 à 10:10
Merci pour la réponse, mais en fait je voudrai faire la même chose mais pour des nombres, au lieu des chaînes de caractères. Quelles instructions dois-je utiliser? Car pour l'instant j'ai rien trouvé sur le net...
Et concernant le tableau, je voulais savoir comment récupérer dans un tableau dans mon programme principal les valeurs lu grâce à cette classe écrite ci-dessus.

Merci encore
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
11 août 2008 à 20:43
Salut.

Une petite precision : Quelle est la strucrure des lignes de ton fichier ? Un score ou plus par ligne ?
Y-a t'il aussi un num. de joueur, si oui plusieurs scores par joueur ? etc ...

J'attend ta reponse avant de poursuivre.

Cordialement,



Dan
0
montdorchaud Messages postés 13 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 21 mai 2010 4
11 août 2008 à 20:58
Salut Dan,
En fait il y a seulement un score par ligne et un seul joueur (c'est donc le cas le plus simple).

Sinon, je me suis relu et je sais pas si j'ai été très clair. Je reprise donc pour être sûr:
- dans la ligne int ligne = tampon.readLine(); que dois-je mettre comme instruction pour lire un int
- quel instructions dois-je mettre dans la classe que j'ai appelé "cFichiers" et dans mon programme principal pour pouvoir sortir un tableau dans lequel chaque case correspond à une ligne du fichier

Merci
0
Utilisateur anonyme
11 août 2008 à 21:29
Re,

C'est mieux ainsi.

La reponse de el_linwin est correcte, pas d'int mais ce n'est pas un probleme, il te suffit de verifier si le contenu de la ligne est bien numerique , si oui tu la recupere dans un int si non catch:

int ligneI = 0;
try
{
ligneI = Integer.parseInt(ligne); // si non num. >>> exception
}

catch (NumberFormatException f)

{
............................
}

// tu disposes de la ligne dans ligne ligneI

Cordialement,

Dan
0
montdorchaud Messages postés 13 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 21 mai 2010 4
12 août 2008 à 00:11
Ok merci pour la réponse. Il me reste maintenant à savoir comment retourner les valeurs contenu dans le tableau "tab". Pour être plus explicite je vous met la méthode readlign revue et corrigé avec le "return tab[]" incorrect à la fin pour vous montrer exactement ce que je veux faire.

static int readlign(String Nomfichier, int Nombrelignes) {

FileReader monFichier = null;
BufferedReader tampon = null;
int tab[];
tab = new int [Nombrelignes];
int i=0;

try {
monFichier = new FileReader(Nomfichier);
tampon = new BufferedReader(monFichier);


while (i<Nombrelignes) {
// Lit une ligne de scores.txt
String ligne = tampon.readLine();
try
{
tab[i] = Integer.parseInt(ligne);
}
catch (NumberFormatException f)
{
System.err.println("Erreur! - Fichier de données non numérique -");
}
i++;
// Vérifie la fin de fichier
if (ligne == null && i==Nombrelignes){
System.out.println("Lecture fichier terminée");
break;
}
else
System.out.println("Erreur! - Problème lecture -");
} // Fin du while
}

catch (IOException exception) {
exception.printStackTrace();
}

finally {
try {
tampon.close();
monFichier.close();
}

catch(IOException exception1) {
exception1.printStackTrace();
}
}

return tab[];

}


Question subsidiaire : dans une classe, est-ce que les variables déclarées à l'intérieur sont par la suite libérées, lorsque le programme principal à finit de solliciter la classe en question?
0
Je sais que ce poste date, mais comme dit le proverbe qui ne tente rien na rien ...

Ma question est comment tu récupère le contenu de ton tab dans ta méthode principale?
0