CommentCaMarche
Recherche
Posez votre question Signaler

Retourner valeurs tableau classe en java [Résolu]

montdorchaud 13Messages postés vendredi 8 août 2008Date d'inscription 21 mai 2010Dernière intervention - Dernière réponse le 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.
Lire la suite 
Réponse
+2
moins plus
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
Ajouter un commentaire
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
+1
moins plus
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;

}

}
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
montdorchaud 13Messages postés vendredi 8 août 2008Date d'inscription 21 mai 2010Dernière intervention - 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?
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
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?
Ajouter un commentaire
Ce document intitulé «  Retourner valeurs tableau classe en java  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.