J'ai un problème pour obtenir une méthode pour lire un fichier, puis le convertir en entier. Voici une brève explication du programme. Il s'agit essentiellement d'un inventaire de concessionnaires automobiles qui garde la trace des véhicules dans le lot en les gardant inscrits dans un fichier texte. Lorsque le programme démarre, il doit lire le fichier et mettre toutes les voitures actuelles dans un tableau afin qu'elles puissent être affichées. Ensuite, le reste du programme fera d'autres choses comme enlever des voitures et ajouter des nouvelles etc. La partie où je suis est quand le programme commence, il doit lire le fichier, mais je n'arrive pas à le faire fonctionner.Java: Problème de lecture du fichier texte puis conversion
Le fichier texte comprend 6 lignes au total; 4 chiffres d'abord puis 2 mots respectivement. Je veux que la méthode lise les quatre premières lignes et les convertisse en entiers et les stocke dans un tableau temporaire. Après cela, il lira les deux lignes suivantes et les stockera dans un tableau temporaire. Ensuite, je prends toutes ces valeurs stockées et les envoie à un constructeur. Le constructeur est ensuite stocké dans un Arraylist et l'Arraylist peut être consulté à tout moment. Dans la sortie, tout cela est très bien. Mais il veut passer à travers la méthode une deuxième fois malgré les barrières en place pour empêcher cela.
Voici le code. C'est une classe et non le programme principal. Je vais essayer d'expliquer le programme du mieux que je peux dans le code.
public class Vehicle {
//All the different private variables for the constructors and methods
private int intholder[], year, type, kilometres, price, loop;
private String make, model, myline, holder[];
//The Arraylist that the different vehicle objects will be stored
ArrayList<Vehicle> allCars = new ArrayList<Vehicle>();
//The Default constructor
public Vehicle(){
make = "Vehicle Make";
model = "Vehicle Model";
type = 0;
year = 0;
kilometres = 0;
price = 0;
}
//The constructor that has information sent to it
public Vehicle(int _type, int _year, int _kilometres, int _price, String _make, String _model){
make = _make;
model = _model;
type = _type;
year = _year;
kilometres = _kilometres;
price = _price;
}
//Text file information
/*
* CAR TYPE CODE:
* 1 - Sedan
* 2 - Truck
* 3 - Crossover
* 4 - SUV
* 5 - Sports
*
* There is a total of 6 lines for each car and are as follows
* 1 - int Type integer
* 2 - int Year
* 3 - int Kilometres
* 4 - int Asking price
* 5 - String Make
* 6 - String Model
*/
//The method in question. It reads through the file, converts the integers and stores them,
//stores the strings, and sends all the information to the constructor
public void readCars()throws IOException{
BufferedReader readFile = new BufferedReader(new FileReader("C:/Users/David/Desktop/FinalProject/Carlot.txt"));
//Setting the length of the temporary arrays
holder = new String[2];
intholder = new int[4];
//The main loop in the method.
do{
//Read the first 4 lines of the file and convert them to integers.
//The try catch shouldn't have to be there because the first 4 lines
//of the file are all numbers, but I put it in there to see when it was messing up.
for(int i = 0; i < 4; i++){
myline = readFile.readLine();
try{
intholder[i] = Integer.parseInt(myline);
}
catch(NumberFormatException e){
System.out.println(e);
}
//Had this in here to see how many lines down the file it would go before messing up.
System.out.println(myline);
}
//Loop to store the Strings
for(int i = 0; i < 2; i++){
myline = readFile.readLine();
holder[i] = myline;
System.out.println(myline);
}
//Sends all the data to the constructor
Vehicle V = new Vehicle(intholder[0], intholder[1], intholder[2], intholder[3], holder[0], holder[1]);
//Several if statements to determine which subclass of vehicle it is.
if(intholder[0]==1){
Sedan S = new Sedan();
allCars.add(S);
}
else if(intholder[0]==2){
Truck T = new Truck();
allCars.add(T);
}
else if(intholder[0]==3){
Crossover C = new Crossover();
allCars.add(C);
}
else if(intholder[0]==4){
SUV U = new SUV();
allCars.add(U);
}
else if(intholder[0]==5){
Sports P = new Sports();
allCars.add(P);
}
//Only break the loop if the myline equals null
}while(myline != null);
//if the loop breaks, close the file
readFile.close();
}
Maintenant, je pense que je sais où ça ne va pas. A la fin du do/while, il vérifie si "myline" est nul. Et parce que la dernière fois qu'il a lu le fichier c'était toujours une chaîne, la boucle continue. La dernière fois qu'il passe par la boucle, tout est nul, donc essayer de convertir l'entier est impossible, donc je reçois des erreurs. Mais je n'ai aucune idée de comment l'obtenir pour lire le fichier à la fin de la boucle sans passer à la ligne suivante. Voici à quoi ressemble le fichier texte.
1
2007
150250
5000
Toyota
Corolla
2
2005
240400
4500
Chevorlet
Silverado
Je ne peux pas l'avoir lu à la fin de la boucle parce que si elle le fait et il y a encore plus de voitures après celui que je viens de le faire, il va dans la ligne suivante lorsque la boucle redémarre tout est jeté de.
Toute aide est appréciée, merci!
Votre question serait plus concise et plus facile à répondre si vous venez d'avoir une classe minimale, compilable et nous a dit votre production attendue vs réelle. –
Tout ce que je m'attends à obtenir en sortie est exactement ce qu'il y a dans le fichier texte. En ce moment, je reçois ce qui est dans le fichier texte plus 6 autres lignes de null. – Dave555
Etes-vous sûr qu'il n'y a pas de ligne vide en bas d'un fichier? Avez-vous envisagé d'ajouter un contrôle pour cela ainsi que null? Ou les lignes vides devraient-elles être autorisées? – efan