Renvoie null

lylandra6 Messages postés 7 Date d'inscription samedi 20 août 2005 Statut Membre Dernière intervention 5 juillet 2010 - 3 juil. 2010 à 01:15
lylandra6 Messages postés 7 Date d'inscription samedi 20 août 2005 Statut Membre Dernière intervention 5 juillet 2010 - 3 juil. 2010 à 12:33
Bonjour.

Je travaille sur la gestion d'avion dans un parking.
Pour l'instant, je bloque sur les classes vols, qui ne donne ni les avions ni les villes quand on les liste ?!?
Quelqu'un saurait-il m'indiquer pourquoi?
Merci.


Dans le main,

Vol.initialiseLesVols("DonneesProjet/nomFichier.txt");

Quand je fais :
System.out.println(Vol.listeVols());
ou
System.out.println(VolArrivee.listeVols());
J'ai bien un listing, mais il indique null dans la colonne avion et dans la colonne ville. Pourquoi ?

Merci.

------------------------------------------

Classes Vol, VolArrivee et VolDepart :


//
// Fichier : Vol.java
//


import java.io.*;
import java.util.*;

public abstract class Vol
{

private String numero, ville, avion, type;
private Horaire heure;
Parking parking=null;
private static Hashtable lesVols=new Hashtable();
private static Hashtable volsEnApproche=new Hashtable();
private static Hashtable volsAuDepart=new Hashtable();
private static final String titre=
"\tVol\t\tAvion\t\tHeure\tVille\t\tType\n";


public Vol()
{}


public Vol(String num, Horaire hr, String ville, String avion)
{
numero=num;
heure=hr;
ville=ville;
avion=avion;
lesVols.put(numero,this);
}

//
// Initialise la liste des vols
//
public static void initialiseLesVols(String nomFichier)
{
int h, mn;
String num, ville, avion;
Horaire heure;
String ligne=null;

System.out.println("");
System.out.println("*** Debut de traitement "+nomFichier+" [");


try
{
BufferedReader entree = new BufferedReader(new FileReader(nomFichier));
StringTokenizer tokens;


while ((ligne=entree.readLine())!= null)
{
// lecture et traitement du vol ARRIVEE
tokens= new StringTokenizer(ligne," ");
num=tokens.nextToken();
h=Integer.parseInt(tokens.nextToken());
mn=Integer.parseInt(tokens.nextToken());
heure=new Horaire(h,mn);
ville=tokens.nextToken();
avion=tokens.nextToken();
new VolArrivee(num, heure, ville, avion);
System.out.print("Avion "+avion+" - arrivée: "+heure+" ("+ville+")");

// lecture et traitement du vol DEPART
ligne=entree.readLine();
tokens= new StringTokenizer(ligne," ");
num=tokens.nextToken();
h=Integer.parseInt(tokens.nextToken());
mn=Integer.parseInt(tokens.nextToken());
heure=new Horaire(h,mn);
ville=tokens.nextToken();
avion=tokens.nextToken();
new VolDepart(num, heure, ville, avion);
System.out.println(" - départ: "+heure+" ("+ville+")");
}
System.out.println ("] *** fin de traitement "+nomFichier);
}
catch(IOException e)
{
System.out.println ("Probleme lecture "+nomFichier);
}

}


public String getNumero()
{
return numero;
}


public String getVille()
{
return ville;
}


public String getAvion()
{
return avion;
}


public Horaire getHeure()
{
return heure;
}

public String getType()
{
return type;
}

public static Hashtable getVols()
{
return lesVols;
}


public static Vol get(String num)
{
if (lesVols.containsKey(num))
return (Vol) lesVols.get(num);
else
{
System.out.println("Le vol numéro " + num + " est inexistant.");
return null;
}
}


public static int nombre()
{
return lesVols.size();
}


public String toString()
{
return "\t" + getNumero() + "\t\t" + getAvion()+ "\t\t" + getHeure() + "\t" + getVille() + "\t\t" + getType() + "\n";
}


public static String listeVols()
{

String chaine=titre;
Enumeration e=lesVols.elements();

while(e.hasMoreElements())
{
chaine=chaine+e.nextElement().toString();
}
return chaine;
}


public static void afficherLesVols()
{
System.out.println(listeVols());
}


public void afficher()
{
System.out.println(toString());
}


public boolean parker()
{
Zone z;
Parking pk=null, premierLibre=null;
Enumeration ez=Zone.getZones().elements();
Enumeration ep;
boolean estVide=false;

while ((ez.hasMoreElements()) && (!estVide))
{
z=(Zone) ez.nextElement();
if (z.estLibre())
{
ep=z.getParkings().elements();
while (ep.hasMoreElements())
{
pk=(Parking) ep.nextElement();
if (pk.estLibre())
{
estVide=((pk.precedent().estLibre()) && (pk.suivant().estLibre()));
if (premierLibre!=null)
premierLibre=pk;
}
}
}
}

if (estVide)
parking=pk;
else
parking=premierLibre;
parking.setEtat(false);

return (parking!=null);
}


public static void parkerLesVols()
{
Enumeration e=lesVols.elements();

while (e.hasMoreElements());
}
}


/* */
/* VolArrivee.java */
/* */
import java.util.Enumeration;
import java.util.Hashtable;

public class VolArrivee extends Vol
{
private String type="Atterit";
private static Hashtable lesVols=new Hashtable();
private static final String titre=
"\tVol\t\tAvion\t\tHeure\tProvenance\tType\n";


public VolArrivee()
{}


public VolArrivee(String num, Horaire hr, String ville, String avion)
{
super(num, hr, ville, avion);
lesVols.put(num,this);
}


public String getType()
{
return type;
}


public static int nombre()
{
return lesVols.size();
}


public static String listeVols()
{
String chaine=titre + "\n";
Enumeration e=lesVols.elements();
while(e.hasMoreElements())
{
chaine+=e.nextElement().toString();
}
return chaine;
}


public static void afficherLesVols()
{
System.out.println(listeVols());
}

}


/* */
/* VolDepart.java */
/* */


import java.util.Enumeration;
import java.util.Hashtable;


public class VolDepart extends Vol
{
private String type="Decolle";
private static Hashtable lesVols=new Hashtable();
private static final String titre=
"\tVol\t\tAvion\t\tHeure\tProvenance\tType\n";

public VolDepart()
{}


public VolDepart(String num, Horaire hr, String ville, String avion)
{
super(num, hr, ville, avion);
lesVols.put(num,this);
}

public String getType()
{
return type;
}


public static int nombre()
{
return lesVols.size();
}


public static String listeVols()
{
String chaine=titre + "\n";
Enumeration e=lesVols.elements();

while(e.hasMoreElements())
chaine+=e.nextElement().toString();

return chaine;
}


public static void afficherLesVols()
{
System.out.println(listeVols());
}

}

4 réponses

kaloway Messages postés 358 Date d'inscription jeudi 24 octobre 2002 Statut Membre Dernière intervention 13 avril 2020
3 juil. 2010 à 08:01
tu n'as pas de refence sur VolDepart dans la methode initialiseLesVols.

new VolDepart(num, heure, ville, avion);
0
lylandra6 Messages postés 7 Date d'inscription samedi 20 août 2005 Statut Membre Dernière intervention 5 juillet 2010
3 juil. 2010 à 09:38
Dans la méthode initialiseLesVols,
on lit un fichier texte, avec pour un même avion le vol arrivée puis le vol départ.
Après avoir traité le vol arrivé, dans la même boucle, je traite le vol de départ (comme ci-dessous). Il y-a donc bien une référence sur VolDepart, non ?


// lecture et traitement du vol DEPART
ligne=entree.readLine();
tokens= new StringTokenizer(ligne," ");
num=tokens.nextToken();
h=Integer.parseInt(tokens.nextToken());
mn=Integer.parseInt(tokens.nextToken());
heure=new Horaire(h,mn);
ville=tokens.nextToken();
avion=tokens.nextToken();
new VolDepart(num, heure, ville, avion);
System.out.println(" - départ: "+heure+" ("+ville+")");
0
lylandra6 Messages postés 7 Date d'inscription samedi 20 août 2005 Statut Membre Dernière intervention 5 juillet 2010
3 juil. 2010 à 11:23
N'est pas ma méthode de création qui pose problème?
Dans la classe VolArrivee par exemple, j'utilise "super", mais ne suis pas sûr de ce que je fais (j'expérimente encore) :

public VolArrivee(String num, Horaire hr, String ville, String avion)
{
super(num, hr, ville, avion);
lesVols.put(num,this);
}

Quand on appelle, num et hr ont bien quelque chose, mais ville et avion sont à null :(
Merci de votre aide.
0
lylandra6 Messages postés 7 Date d'inscription samedi 20 août 2005 Statut Membre Dernière intervention 5 juillet 2010
3 juil. 2010 à 12:33
Je pense avoir compris :
il y-a confusion entre attribut et variable d'appel.
Si je mets
public VolArrivee(String num, Horaire hr, String ville0, String avion0)
{
super(num, hr, ville0, avion0);
lesVols.put(num,this);
}

dans mes classes, ça fonctionne.
0
Rejoignez-nous