0
votes

Scanner pour le fichier d'entrée et stocker des objets de données à partir du fichier d'entrée dans le tableau

Fondamentalement, je devais créer un scanner pour un fichier donné et lire via le fichier (le nom est entré via le terminal par l'utilisateur) en comptant le nombre de lignes dans le fichier. Ensuite, après, j'ai dû créer un tableau d'objets du fichier, de la bonne taille (où le nombre de lignes est entré). Ensuite, je devais créer un autre scanner pour le fichier et la lire à nouveau, le stockant dans la matrice que j'ai créée. Et enfin, je devais retourner le tableau dans la méthode.

Mon problème est que je ne peux pas sembler obtenir le deuxième scanner pour stocker réellement les objets de fichier dans le tableau. p>

J'ai essayé d'utiliser .nextline code> à l'intérieur d'une boucle pour la boucle qui appelle également la matrice, mais cela ne semble pas fonctionner. P>

public static Data[] getData(String filename) {

            Scanner input = new Scanner(new File(filename));
            int count = 0;
                while (input.hasNextLine()) {
                input.nextLine();
                count++;
                } 
                System.out.println(count);

         Data[] data = new Data[count]; 
         Scanner input1 = new Scanner(new File(filename));          
           while (input1.hasNextLine()) {
                for (int i = 0; i < count; i++) {
                    System.out.println(data[i].nextLine);
                } 
            } 
         return data;
  }


7 commentaires

Pouvez-vous élaborer sur 'ne semble pas fonctionner' ? Quelle sortie voyez-vous réellement?


Nous pourrions également utiliser le code source pour data , à aucun moment, vous appelez l'une de ses méthodes.


Vous n'utilisez pas INPUT1 après l'avoir ouvert. Si vous ne l'utilisez pas, vous ne pouvez pas lire. Et vous devez attribuer la chose que vous avez lu dans Data tableau. Vous n'en attribuez nulle part.


Il y a très peu de tentatives pour résoudre le problème ici. Comme mentionné, l'OP n'essaie même pas de lire le fichier ou d'appeler des méthodes sur le type de retour, DATA . Pourquoi ce code ne fonctionne-t-il pas? n'est pas une vraie question.


Le but de cette méthode consiste essentiellement à stocker les données du fichier d'entrée dans un tableau. Et que voulez-vous dire par le code source pour les données? @markspace


J'ai essayé d'éditer le code et je me suis assuré que j'ai utilisé Input1 après l'avoir ouverte. Est-ce que ça a du sens maintenant? @Realskeptic


Vous venez d'ajouter un chèque s'il y a une autre ligne (qui est une bonne chose), mais où utilisez-vous pour Lire une ligne ?


4 Réponses :


0
votes

pas clair quelles data.class voulez-vous dire que si vous le permettez de la chaîne, le problème serait évidemment dans cette ligne xxx

si vous souhaitez affecter et imprimer simultanément, écrivez cette < / p> xxx

et n'oubliez pas de fermer vos scanners, meilleure utilisation try-with-with-ressources . Si vos données sont votre classe personnalisée, vous feriez mieux d'apprendre sur sérialisement-désériorialisation Ou utilisez un objet MapsPer-S (Jackson, par exemple) pour stocker vos instances de classe et les restaurer.


0 commentaires

0
votes

Votre moyen d'ouvrir le fichier juste pour compter les lignes, puis à nouveau en boucle à travers ses lignes pour les stocker dans la matrice n'est pas si efficace, mais cela pourrait être juste une mission d'école.
Essayez ceci: xxx

après la 1ère boucle, vous devez fermer le scanner et le réouvoir afin de démarrer partout dans la première ligne du fichier.


2 commentaires

Ouais, Data [] est une classe distincte où elle appelle les paramètres du fichier d'entrée et fait beaucoup de calculs et de manipulations différents du fichier de réseau / données. L'en-tête de méthode de la classe de données est la suivante: Données publiques (Nom de la chaîne, Double Wage, Int Revenu) {


Alors pourquoi ne l'avez-vous pas posté dans votre question? Comment l'initialisation de chaque article serait-elle effectuée?



0
votes

Vous devez absolument utiliser une IDE si vous n'en avez pas un, essayez Intellij ... vous avez une vérification automatique et une vérification de la syntaxe et beaucoup plus.

Ce n'est pas clair ce que vous voulez faire dans votre boucle, Parce qu'il y a plusieurs erreurs, par exemple la fonction readline () fonctionne uniquement avec le scanner objekt, de sorte que vous pouvez faire entrée.nextline () ou entrée1.nextline () ...

Donc, je vous montre simplement comment vous pouvez obtenir les données d'un fichier avec scanner: xxx


0 commentaires

0
votes

Vous n'avez pas besoin de lire à deux reprises le fichier - utilisez simplement une arracheListe pour contenir les données qui arrivent dans le fichier, comme ceci, puis renvoyez les données [] à la fin:

public static Data[] getData(String filename) {
     List<Data> result = new ArrayList<>();
     try (Scanner input = new Scanner(new File(filename))){
        while (input.hasNextLine()) {
            Data data = new Data(input.nextLine());
            result.add(data);
        } 
     }

     return result.toArray(new Data[0]);


0 commentaires