2017-04-09 4 views
0

Quelqu'un pourrait-il me aide à la saisie de ces données en 3 objets dans un ArrayList (un pour chaque joueur)?lecture d'un fichier texte (avec filechooser) et le stockage dans un ArrayList (chaque ligne est un nouvel objet à l'intérieur arraylist

Texte exemple de fichier:

Steve| Barkley| 258| 300 
Carl |Johnson |142 
Frank|Davidson 

code Java.

//couldn't write the normal jfilechoose code above due to space 
    File playerFile = new File(selectedFile.getAbsolutePath()); 

    Scanner in = new Scanner(playerFile); 

    String[] playerData; //array to hold data 

    while (in.hasNext()) { 
     String data = in.nextLine(); 

     playertData = data.split("\\|"); 
     playerData = Arrays.copyOf(playerData,playerData.length+1); 

     String firstName = playerData[0]; 
     String lastName = playerData[1]; 

     double playererayear1 = Double.parseDouble(playerData[2]==null?"0":playerData[2]); 
     double playererayear2 = Double.parseDouble(playerData[3]==null?"0":playerData[3]); 

     double playererayear3 = Double.parseDouble(playerData[4] == null?"0":playerData[4]); 
+0

ce qui est studentdata ici? – prasanth

+0

Ah j'ai accidentellement changé le nom en étudiant pendant que je faisais testruns mais c'est toujours le playerData essaye de voir si je peux éditer la question – Alexa431

+0

Voulez-vous avoir un 'ArrayList ' ou 'ArrayList '? – prasanth

Répondre

0

Vous pouvez créer une catégorie distincte pour contenir des informations sur le lecteur

public class Player { 
    private String firstName; 
    private String lastName; 
    private double playerEraYear1; 
    private double playerEraYear2; 
    private double playerEraYear3; 

    public String getFirstName() { 
    return firstName; 
    } 

    public void setFirstName(String firstName) { 
    this.firstName = firstName; 
    } 

    public String getLastName() { 
    return lastName; 
    } 

    public void setLastName(String lastName) { 
    this.lastName = lastName; 
    } 

    public double getPlayerEraYear1() { 
    return playerEraYear1; 
    } 

    public void setPlayerEraYear1(double playerEraYear1) { 
    this.playerEraYear1 = playerEraYear1; 
    } 

    public double getPlayerEraYear2() { 
    return playerEraYear2; 
    } 

    public void setPlayerEraYear2(double playerEraYear2) { 
    this.playerEraYear2 = playerEraYear2; 
    } 

    public double getPlayerEraYear3() { 
    return playerEraYear3; 
    } 

    public void setPlayerEraYear3(double playerEraYear3) { 
    this.playerEraYear3 = playerEraYear3; 
    } 
} 

Maintenant, vous pouvez analyser le fichier, créer un objet Player pour chacun des joueurs et les ajouter à une liste

public void parseFile() { 
    File playerFile = new File(selectedFile.getAbsolutePath()); 
    Scanner in = new Scanner(playerFile); 
    List<Player> players = new ArrayList<>(); 
    while (in.hasNext()) { 
     String data = in.nextLine(); 
     String[] playerData = data.split("\\|"); 

     Player p = new Player(); 
     p.setFirstName(playerData[0]); 
     p.setLastName(playerData[1]); 

     if (playerData.size >= 3) { 
     double playererayear1 = Double.parseDouble(playerData[2] == null ? "0" : playerData[2]); 
     p.setPlayerEraYear1(playererayear1); 
     } 

     if (playerData.size >= 4) { 
     double playererayear2 = Double.parseDouble(playerData[3] == null ? "0" : playerData[3]); 
     p.setPlayerEraYear2(playererayear2); 
     } 

     if (playerData.size >= 5) { 
     double playererayear3 = Double.parseDouble(playerData[4] == null ? "0" : playerData[4]); 
     p.setPlayerEraYear3(playererayear3); 
     } 

     players.add(p); 
    } 
} 
+0

Malheureusement je suis arrivé: Le fichier sélectionné: C: \ Users \ yorkshire \ Documents \ PlayerData.txt Exception dans le thread "principal" java.lang.ArrayIndexOutOfBoundsException: 4 \t à PlayerList.parseFile (PlayerList.java:44) \t à Driver.main (Driver.java:6) – Alexa431

+0

Je veux dire que vous n'avez pas la dernière colonne dans votre fichier texte. Combien de colonnes avez-vous dans votre fichier texte pour chaque joueur? Est-ce que ça va être 5? – prasanth

+0

S'il ne s'agit pas du même nombre de colonnes pour chaque ligne, vous pouvez ajouter une vérification avant de définir playerEraYear pour les années 1, 2 et 3 – prasanth

0
package com.aegle.validator; 

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 
import java.util.Scanner; 

public class Test { 
    public static void main(String[] args) throws FileNotFoundException { 
     List<Player> playerList = new ArrayList<Player>(); 
     File playerFile = new File("");//Set your file path 
     Scanner in = new Scanner(playerFile); 

     while (in.hasNext()) { 
      String[] data = in.nextLine().split("\\|"); 
      Player player = new Player(data[0], data[1]); 
      player.setYears(Arrays.copyOfRange(data, 2, data.length)); 
      playerList.add(player); 
     } 

     System.out.println(playerList);//Just to test 
    } 
} 

class Player { 
    String firstName; 
    String lastName; 
    String[] years; 

    public Player(String firstName, String lastName) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 

    public void setYears(String[] years) { 
     this.years = years; 
    } 

    //Introduce getters as you need 

    @Override 
    public String toString() { 
     return "Player{" + 
       "firstName='" + firstName + '\'' + 
       ", lastName='" + lastName + '\'' + 
       ", years=" + Arrays.toString(years) + 
       '}'; 
    } 
}