IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Utilisation attributs d'objets d'1 ArrayList


Sujet :

Collection et Stream Java

  1. #21
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 36
    Par défaut
    Citation Envoyé par lylandra6 Voir le message
    Génial.
    C'est tout à fait ce genre de solution que je recherchais.
    Du coup, je me donne quelques jours pour peaufiner mon projet, mais grâce à vos conseils et les solutions proposées, j'ai pu éviter l'écueil, et surtout progresser un peu en Java
    Merci.
    -----------

    Je suis désolé de devoir encore faire appel appel à ce forum.
    Enfin, content parce que les réponses m'ont chaque fois permis d'avancer, mais désolé parce que je ne parviens toujours pas à voir le bout d'un projet, pourtant simple.

    Il y-a trop de sources pour que j'envoie ici. En gros, il s'agit de faire atterrir un ravion, puis un autre ravion, encore un ravion (Hum! C'est probablement qu'il y-a un nid d'ravion dans le coin, ça explique pourquoi je nage).
    Une bonne âme peut-elle envoyer un mail à
    lylandra(at)free.fr
    pour que je lui fasse parvenir mes sources+données, afin d'être aidé pour l'avancée du projet?
    En prime, pour celui/celle qui n'a pas compris la blague du n'hydravion, je fournis l'explication ainsi que 2 autres blagues du même acabit
    Vraiment, ça m'aiderait qu'1 pro se penche sur mon problème, car ça fait 3 nuit que je blanchit sur la résolution.

    Merci.

  2. #22
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Si les sources sont trop grandes, fais un tout petit programme qui a exactement le problème que tu rencontres, et qui ne fait que ça.

    Puis, montre-nous ça.

    (En fait, c'est toujours ce qu'il faut faire, sans exception.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #23
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 36
    Par défaut Une partie du programme
    Citation Envoyé par thelvin Voir le message
    Si les sources sont trop grandes, fais un tout petit programme qui a exactement le problème que tu rencontres, et qui ne fait que ça.

    Puis, montre-nous ça.

    (En fait, c'est toujours ce qu'il faut faire, sans exception.)
    Comme tout est imbriqué, ça ne va pas être facile,
    mais voilà en gros :
    AeroportApp.java créer des listes d'avions, de vols, de séjours (vol arrivée + vol départ), des zones d'embarquement et des parkings
    Constitution des avions et vols ça marche. Séjours aussi. Zone, ça a l'air.

    Par contre, la constitution de la liste de parkings reste à 0, j'ignore encore pourquoi.

    Le programme affiche
    Nombre Zones : 7
    Nombre Parkings : 0 (il devrait pourtant y en avoir)
    Nombre de Sejours : 49

    Il y-a aussi un probleme de pointeur null
    java.lang.NullPointerException
    sur la ligne
    System.out.print(sejoursHorsContact.taille());
    Donc à partir de la liste de sejours, quelque chose bloque pour constituer 2 listes (les séjours en contact et séjours hors contact en fonction de la nature des avion qui font le séjour).


    Voici quelques unes des sources.

    AeroportApp.java (le main du programme) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
     
    // AeroportApp.java
    package aeroport;
    import java.io.*;
    import java.util.*;
     
    public class AeroportApp
    { 
    	// Les variables de delais en mn
    	public static final int tempsPrepa=40; // Delai de preparation minimum entre arrivee-depart
    	public static final int tempsDelai=8; // Delai minimum entre deux avions sur le meme parking
     
    	//
    	// Debut de programme
    	//
    	public static void main (String args[]) throws IOException, InterruptedException
     
    	{	
        	System.out.println( "-------------------------------------------" );
        	System.out.println( "INITIALISATION Debut de journee            " );
        	System.out.println( "-------------------------------------------" );
        	new AeroportApp();
    	}
     
    	//	Traitement Erreur
    	private static void Erreur(Exception e, int code){
    		System.err.println("Erreur : "+e);
    		System.exit(code);
    	}
     
        AeroportApp() throws IOException, InterruptedException{
        	//
        	// 
        	//
     
            System.out.println("Temps minimum de preparation entre chaque avion      : "+tempsPrepa+" mn");
            System.out.println("Temps minimum entre chaque avion sur un meme parking : "+tempsDelai+" mn");
            System.out.println("");
     
     
            //=================================================//
            //		Traitement des fichiers                    //
            //                                                 //
            // Creation des avions et vols depuis les fichiers //
            //=================================================//
     
     
            ListeAvions lesAvions = new ListeAvions();
            ListeVols lesVols = new ListeVols();
    		ListeSejours lesSejours = new ListeSejours();
    		ListeParkings lesParkings = new ListeParkings();
     
            Zone.creerlesZones();
    		lesParkings.creerLesParkings();
     
    		System.out.println("Nombre Zones    : "+Zone.nombre());
    		System.out.println("Nombre Parkings : "+lesParkings.nombre());
     
    		/*
    		 * On initialise les vols
    		 * et les sejours constitues par ces vols (lesSejours en parametre)
    		 */
            lesAvions.initialiseLesAvions("DonneesProjet/avionsFC10-v1.txt");       
            lesVols.initialiseLesVols("DonneesProjet/ProgrammeVolsFC-v1.txt", lesSejours, lesAvions);
    	    lesSejours.classer();
     
            //===============================//
            // Attribution Parkings-Sejours  //
            //===============================//
     
            /*
             * Constitution de listes secondaires, destinees a faciliter les traitements
             */
            ListeSejours sejoursHorsContact;
            ListeSejours sejoursEnContact;       
            ListeParkings parkingsHorsContact;
            ListeParkings parkingsAuContact;
     
            /*
             * On balaie la liste des sejours, pour constituer une liste HorsContact et EnContact
             */
            sejoursHorsContact=lesSejours.horsContact();
            sejoursEnContact=lesSejours.enContact();
            sejoursHorsContact.classer();
            sejoursEnContact.classer();
            parkingsHorsContact=lesParkings.horsContact();
            parkingsAuContact=lesParkings.auContact();
     
     
            System.out.println("*** Debut de traitement Attribution Parkings *** [");
            System.out.println("\t--- Atterrissage (Avions hors contact prioritaires) ---");
     
            System.out.println("Sejours hors contact : ");
            System.out.print(sejoursHorsContact.taille());
     
            boolean parker;
            parker=sejoursHorsContact.attribuerParking(parkingsHorsContact);
            if (!parker)
            {
            	System.out.println("!!! Tous les avions hors contact n'ont pas pu etre parques.");
            }
            else
            {
            	System.out.println("Tous les avions hors contact parques.");
            }
            parker=sejoursEnContact.attribuerParking(parkingsAuContact);
     
     
     
     
     
     
     
            /*
             * 
             */
            System.out.println("\n\t\t--- Parquer AvionsGros :");
            // AvionGros.trouveParking();
     
     
            int choix=0;	// choix du Menu
            int choix2=0;	// choix sous-Menu (quand il y-a)
            while(choix!=0)
            {
            	System.out.println("\n\n____________________________");
            	System.out.println("____   Menu Principal   ____");
            	System.out.println("____________________________");
    			System.out.println("|--AFFECTATION-------------|");
    			System.out.println("| 1.  Reinitialiser        |");
    			System.out.println("| 2.  Optimiser            |");
    			System.out.println("|--CONTROLES---------------|");
            	System.out.println("| 3.  Lister les avions    |");
                System.out.println("| 4.  Lister les vols      |");
    			System.out.println("| 5.  Lister les sejours   |");
    			System.out.println("|--GESTION-----------------|");
    			System.out.println("| 6.  Affichage des Halls  |");
    			System.out.println("| 7.  Annulations/Retards  |");
    			System.out.println("|--OPTIONS-----------------|");
    			System.out.println("| 8.  Change parametres    |");
    			System.out.println("| 9.  Sauve/Charge donnees |");
    			System.out.println("|--------------------------|");
                System.out.println("| 0. Quitter               |");
                System.out.println("|__________________________|");
                System.out.println("/nEntrez le numero correspondant a votre choix :");
     
                choix=Clavier.lireInt();
                switch(choix){
                	case 12 : // pour tester                	 
                    	{
                    		System.out.print("\n\nTests\nListe vols:\n");
                    		System.out.println("vol CAL007:");
                    		Vol a = lesVols.getElement("CAL007");
                    		System.out.print(a.getHeure());
                    		System.out.print("\t"+a.getAvion());
                    		System.out.print("\t"+a.getType());
                    		System.out.print("\t"+a.getVille());
                    	}
     
    					//
    					// CONTROLES
    					//
     
                    case 3 : 
                    	// Affiche la liste des avions
                    	lesAvions.afficher();
     
                    	// System.out.print("\n\t  Menu Avions\n\t  ============\n\t  1. Tous les avions\n\t  2. Avions au contact\n");
                    	// System.out.print("\t  3. Avions sur parkings distants uniquement\n\t  ============\n\tVotre Choix :\n");
                    	// choix2=Clavier.lireInt();
                    	// if (choix2==1) {lesAvions.afficher();}
                    	// if (choix2==2) {AvionPetit.afficherLesAvions();}
                    	// if (choix2==3) {AvionGros.afficherLesAvions();}
                       	break;
     
                    case 4 :
                    	// Affiche la liste des vols
     
                    	System.out.println("Nombre vols :"+lesVols.nombre());
                    	System.out.print("\n\t  Menu Vols\n\t  ============\n\t  1. Tous les vols\n\t  2. Arrivees\n");
                    	System.out.print("\t  3. Departs\n\t  ============\n\tVotre Choix :\n");
                    	choix2=Clavier.lireInt();
                    	if (choix2==1) {lesVols.afficher(0);}
                    	if (choix2==2) {lesVols.afficher(1);}
                    	if (choix2==3) {lesVols.afficher(2);}
                       	break;
     
    				case 5 :
    					// Affiche la liste des sejours
    					System.out.println("/n");
    					System.out.println("|--CONTROLES---------------|");
    					System.out.println("| ..Affichage des sejours  |");
    					System.out.println("| 1.  Par Hall             |");
    					System.out.println("| 2.  Par Parking          |");
    					System.out.println("| 3.  Par Heures           |");
    					System.out.println("| 0.  Retour Menu Principal|");
    					System.out.println("|--------------------------|");
    					break;
     
    				//
    				// GESTION
    				//
     
    				case 6 :
    					// Affichage des Halls
    					System.out.println("|--GESTION-----------------|");
    					System.out.println("| ..Affichage des Halls    |");
    					System.out.println("| 0.  Tous les halls       |");
    					System.out.println("|  ou entrez le numero     |");
    					System.out.println("|  du hall a afficher      |");
    					System.out.println("|--------------------------|");
     
    					break;
     
    				case 7 :
    					// Annulations, retard
    					break;
     
     
                }
     
            }
     
            System.out.println("\n\n\n *** Fin de traitement *** \n");
     
     
        }
     
    }

    Classe Parking.java,
    qui semble marcher, mais je suis pas sûr
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    //Parking.java
    package aeroport;
     
    import java.util.*;
     
    public abstract class Parking
    {
    	private String numero;
    	private Zone zone;
    	private TreeMap<Integer, TrancheHoraire> occupation;
     
     
     
    	public Parking()
    	{
     
    	}
     
     
    	public Parking(String num)
    	{
    		numero=num;
    		occupation = new TreeMap();
    	}
     
    	public Parking(Zone numZone) 
    	{
    		String chaine="";
     
    		zone=numZone;
    		chaine=zone.getNom().substring(0,1);
    		numero=chaine+String.valueOf(zone.taille()+1);
     
    	}
     
     
    	public Parking(String pk, Zone z)
    	{
    		numero=pk;
    		zone=z;
     
    	}
     
    	public String getNumero()
    	{
    		return numero;
    	}
     
     
    	public Zone getZone()
    	{
    		return zone;
    	}
     
    	public String toString()
    	{
    		return numero + "  " + getNumero();
    	}
     
    	public void afficher()
    	{
    		System.out.println(toString());
    	}
     
    	public void ajoutOccupation(TrancheHoraire plage)
    	{
    		Horaire deb;
    		deb=plage.getDebutTrancheHoraire(); // on reccupere le debut de la plage
    		int debut=deb.horaireEnMinutes();	// et on le converti en entier
    		occupation.put(debut, plage);		// pour trier la map sur le debut d'occupation
    	}
     
    	public boolean plageLibre(TrancheHoraire plage)
    	{
    		/*
    		 * On part du principe que la tranche horaire passee en parametre est libre
    		 * libre passe a faux des qu'on rencontre une occupation qui mord sur la tranche horaire
    		 */
    		boolean libre=true;
    		TrancheHoraire plageTest;
    		Set cles=occupation.keySet();
    		Iterator i=cles.iterator();
    		while(i.hasNext()){
    			plageTest=occupation.get(i.next());
    			if (plage.dansTrancheHoraire(plageTest)){
    				libre=false; // cas ou la place est deja prise
    			}			
    		}
    		/*
    		 * libre est vrai si aucune tranche horaire dans la treemap occupation
    		 * ne contient la tranche horaire passee en parametre
    		 */
    		return libre;
    	}
     
     
     
    }
    ListeParkings.java, qui semble ne pas fonctionner, puisqu'on en trouve 0 !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
     
    // ListeParkings.java
     
    package aeroport;
     
    import java.util.ArrayList;
    import java.util.Enumeration;
    import java.util.Hashtable;
    import java.util.List;
     
    public class ListeParkings {
    	private ArrayList<Parking> listeP ;
     
        public ListeParkings() {
            listeP = new ArrayList();
        }
     
        public boolean estvide(){
            return listeP.isEmpty();
        }
        public void ajouter(Parking o){
            listeP.add(o);
        }
        public void enlever(Parking o){
            listeP.remove(o);
        }
        public boolean contient(Parking o){
            return listeP.contains(o);
        }
        public int getNombre(){
            return listeP.size();
        }
        public String toString(){
            return listeP.toString();
        }
        public ArrayList<Parking> getListe(){
        	return listeP;
        }
     
        public int nombre(){
            return listeP.size();
        }
     
    	public static void creerLesParkings()
    	{
    		int n;
    		Enumeration e=Zone.getZones().elements();
    		Zone z;
     
    			while (e.hasMoreElements())
    			{
    				z=(Zone) e.nextElement();
    				if (z.getNom()=="Mike")
    					n=4;
    				else
    					if (z.getNom()=="Papa")
    						n=3;
    					else
    						if (z.getNom()=="Romeo")
    							n=2;
    						else
    							if (z.getNom()=="Sierra")
    								n=2; 
    							else 
    								if (z.getNom()=="Tango")
    									n=2;
    								else
    									if (z.getNom()=="Uniform")
    										n=1;
    									else
    										n=2;
     
    			}
    		Zone.get("Papa").ajouterParking("P1");
    		Zone.get("Papa").ajouterParking("P2");
    		Zone.get("Papa").ajouterParking("P4");
     
    		Zone.get("Romeo").ajouterParking("R1");
    		Zone.get("Romeo").ajouterParking("R2");
     
    		Zone.get("Sierra").ajouterParking("S4");
    		Zone.get("Sierra").ajouterParking("S5");
     
    		Zone.get("Tango").ajouterParking("T3");
    		Zone.get("Tango").ajouterParking("T7");
     
    		Zone.get("Uniform").ajouterParking("U1");
     
    		Zone.get("Victor").ajouterParking("V6");
    		Zone.get("Victor").ajouterParking("V7");
     
    		Zone.get("Mike").ajouterParking("M1");
    		Zone.get("Mike").ajouterParking("M2");
    		Zone.get("Mike").ajouterParking("M3");
    		Zone.get("Mike").ajouterParking("M4");
     
     
     
    	}
     
    	public static String listeParkingsZone(ListeParkings l)
    	{
    		String chaine="";
    		Enumeration ep;
    		Enumeration ez=Zone.getZones().elements();
    		Zone z;
     
     
    		while (ez.hasMoreElements())
    		{
    			z=(Zone) ez.nextElement();
     
    			if (l.getNombre()>1)
    				chaine+="Parkings de la zone " + z.getNom() + " :\n";
    			else
    				if (l.getNombre()==1)
    					chaine+="Parking de la zone " + z.getNom() + " :\n";
    				else
    					chaine+="Pas de parking zone " + z.getNom();
     
    			ep=z.getParkings().elements();
    			while (ep.hasMoreElements())
    				chaine+="    " + ep.nextElement().toString();			
    		}
     
    		return chaine;
    	}
     
    	/*
    	 * retourne une partie de la liste des parkings
    	 * : uniquement les parkings hors contact
    	 */
    	public ListeParkings horsContact()
    	{
    		ListeParkings parkingHC=null;
    		for (Parking p : listeP)
    		{
    			if (p instanceof ParkingHorsContact)
    			{
    				((List<Parking>) parkingHC).add(p);
    			}			
    		}
    		return parkingHC;
    	}
     
    	/*
    	 * retourne une partie de la liste des parkings
    	 * : uniquement les parkings au contact
    	 */
    	public ListeParkings auContact()
    	{
    		ListeParkings parkingAC=null;
    		for (Parking p : listeP)
    		{
    			if (p instanceof ParkingAuContact)
    			{
    				((List<Parking>) parkingAC).add(p);
    			}			
    		}
    		return parkingAC;
    	}
     
    	public Parking trouveParking(TrancheHoraire plage) 
    	{
    		for (Parking p : listeP)
    		{
    			if (p.plageLibre(plage))
    			{
    				return p;
    			}
    		}
    		return null;
    	}
     
     
    }
    Des classes dont je ne suis pas sûr :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
     
    // Zone.java
    //
    //Zone.java
    //
     
    package aeroport;
     
    import java.util.*;
     
     
    public abstract class Zone
    {
    	private String nom;
    	private boolean libre=true;
    	private Hashtable lesParkings=new Hashtable();
    	private static Hashtable lesZones=new Hashtable();
     
     
     
    	public Zone()
    	{}
     
     
    	public Zone(String n)
    	{
    		nom=n;
    		lesZones.put(nom,this);
    	}
     
     
    	public static void creerlesZones()
    	{
    		new ZoneHorsContact("Mike");
    		new ZoneAuContact("Papa");
    		new ZoneAuContact("Romeo");
    		new ZoneAuContact("Sierra");
    		new ZoneAuContact("Tango");
    		new ZoneAuContact("Uniform");
    		new ZoneAuContact("Victor");
    	}
     
     
    	public String getNom()
    	{
    		return nom;
    	}
     
     
    	public abstract String getType();
     
     
     
    	public Hashtable getParkings()
    	{
    		return lesParkings;
    	}
     
     
    	public static Hashtable getZones()
    	{
    		return lesZones;
    	}
     
     
    	public static Zone get(String n)
    	{
    		if (lesZones.containsKey(n))
    			return (Zone) lesZones.get(n);
    		else
    		{
    			System.out.println("Pas de zone " + n);
    			return null;
    		}
    	}
     
     
    	public static int nombre()
    	{
    		return lesZones.size();
    	}
     
     
    	public int taille()
    	{
    		return lesParkings.size();
    	}
     
     
    	public String toString()
    	{
    		return "Zone " + nom;
    	}
     
     
    	public static String listeZones()
    	{
    		String chaine="";
    		Enumeration e=lesZones.elements();
     
    		if (nombre()>1)
    			chaine+="Les zones sont :\n";
    		else
    			if (nombre()==1)
    				chaine+="La zone est :\n";
    			else
    				chaine+="Il n'existe aucune zone.";
    		while(e.hasMoreElements())
    			chaine+="    " + e.nextElement().toString();
     
    		return chaine;
    	}
     
     
    	public String listeParkings()
    	{
    		String chaine="";
    		Enumeration e=lesParkings.elements();
     
    		chaine+="Les parkings de la zone " + nom + " sont :\n";
    		while(e.hasMoreElements())
    			chaine+="    " + e.nextElement().toString() + "\n";
     
    		return chaine;
    	}
     
     
    	public void afficher()
    	{
    		System.out.println(toString());
    	}
     
     
    	public static void afficherlesZones()
    	{
    		System.out.println(listeZones());
    	}
     
     
    	public void afficherLesParkings()
    	{
    		System.out.println(listeParkings());
    	}
     
     
    	public abstract void ajouterParking();
     
    	public abstract void ajouterParking(String pk);
     
     
     
    }

    Et enfin, des classes qui fonctionnent (ouf!) indispensables je pense pour avoir une vue d'ensemble :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    //Vol.java
     
     
    package aeroport;
     
     
    public abstract class Vol
    {
     
    	protected String numero, ville, avion, type, message;
    	protected int retard; // retard annonce (en minutes)
    	protected Horaire heure;
     
    	public Vol()
    	{}
     
     
    	public Vol(String num, Horaire hr, String ville0, String avion0, String type0) 
    	{
    		numero=num;		// numero du vol
    		heure=hr;		// heure
    		ville=ville0;	// ville
    		avion=avion0;	// nom de l'avion
    		type=type0;		// pour dire s'il atterit ou decolle
    		retard=0;		// retard en minutes. 0: pas de retard; -1: annulation
    		message="";		// message eventuel
    	}
     
    	public void affiche()
    	{
    		String m;
    		m="  "+numero+"\t\t"+heure+"\t"+ville;
    		System.out.println(m);
    	}
     
    	public void putMessage(String message0)
    	{
    		message=message0;
    	}
     
    	public String getMessage()
    	{
    		return message;
    	}
     
    	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 String messageRetard() // renvoi un message en fonction du retard -1, 0 ou >0
    	{
    		if (retard==0) return "a l'heure";
    		else
    		{
    			if (retard==-1) return "** Vol annule **";
    			else
    				{
    					String m="Retard annonce : "+retard+" mn.";
    					return m;
    				}
    		}
    	}
     
    	public int getRetard()	// retourne la valeur -1, 0 ou >0 de retard
    	{
    		return retard;
    	}
     
    	// Le traitement des retards etant differents selon qu'il s'agisse d'un atterrissage ou d'un  decollage,
    	// on trouvera les methodes complementaires dans VolArrivee et VolDepart
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
     
    // ListeVols.java
     
    package aeroport;
     
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.StringTokenizer;
    import java.io.*;
    import java.util.Collection;
     
    /**
     *
     */
     
    public class ListeVols {
        private ArrayList<Vol> liste ;
        /* constructeurs */
        public ListeVols() {
            liste = new ArrayList();
        	String titre=
        		"\t\tVol\t\tAvion\t\t\tHeure\tVille\t\tType\n";
        }
     
        public boolean estvide(){
            return liste.isEmpty();
        }
        public void ajouter(Vol o){
            liste.add(o);
        }
        public void enlever(Vol o){
            liste.remove(o);
        }
        public boolean contient(Vol o){
            return liste.contains(o);
        }
        public int nombre(){
            return liste.size();
        }
        public String toString(){
            return liste.toString();
        }
        public ArrayList<Vol> getListe(){
        	return liste;
        }
     
        /*
         * Retourne le vol ayant le num vol passe en parametre
         * retourne nul si pas trouve 
         */
        public Vol getElement(String num)
        {
        	for (int i=0; i<liste.size(); i++)
        	{
        		Vol volCourant=liste.get(i); // on reccupere le vol d'indice i
        		if (num.equals(volCourant.getNumero()))
        			return volCourant;		// retourne le vol courant si numero vol coincide
        	}
     
        	return null;					// null sinon
        }
     
    	/*
    	 * Afficher les vols selon qu'ils soient du type passe en parametre :
    	 * 0 : Atterrissages et Decollages
    	 * 1 : Atterrissages seuls
    	 * 2 : Decollages seuls
    	 */
    	public void afficher(int type)
    	{
    		switch (type)
    		{
    		case 1:	// Atterrissages seuls
    			for (Vol v : liste)
    			{
    				if (v instanceof VolArrivee)
    				{
    					v.affiche();
    				}
    			}
    			break;
     
    		case 2: // Decollages seuls
    			for (Vol v : liste)
    			{
    				if (v instanceof VolDepart)
    				{
    					v.affiche();
    				}
    			}
    			break;
     
    		default: // Atterrissages et decollages
    			for (Vol v : liste)
    			{
    				v.affiche();
    			}
    			break;
    		}
    	}
     
    	//
        // Initialise la liste des vols
        // en fonction du fichier de donnes qui contient :
    	//		numero vol, heure, minute, ville, numero avion (avion qui atterit)
    	//		numero vol, heure, minute, ville, numero avion (le meme avion qui cette fois ci decolle)
    	//
    	// On indique en parametre le nom du fichier a ouvrir
    	// et la liste de sejours a remplir (1 sejour = 1 arrivee + 1 depart du meme avion)
    	//
    	public void initialiseLesVols(String nomFichier, ListeSejours lesSejours, ListeAvions lesAvions)
    	{
    		ListeVols lesVols = new ListeVols();
    		int h, mn;
    		String num0, num1, ville, avion;
    		Avion avionS;
    		Horaire heure0,heure1;
    		TrancheHoraire occupe;
    		String ligne=null;
    		Sejour sejour;
    		Vol volA, volD;
     
    	    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," ");
            	  	num0=tokens.nextToken();
            	  	h=Integer.parseInt(tokens.nextToken());
            	  	mn=Integer.parseInt(tokens.nextToken());
            	  	heure0=new Horaire(h,mn);
            	  	ville=tokens.nextToken();
            	  	avion=tokens.nextToken();
            	  	volA=new VolArrivee(num0,heure0,ville,avion,"Atterit");
            	  	lesVols.ajouter(volA); // ajoute a la liste
            	  	System.out.print("["+num0+" : Avion "+avion+" - arrivee: "+heure0+" \t("+ville+")");
     
     
            	//
    			// lecture et traitement du vol DEPART
    			//
            	  	ligne=entree.readLine();
            	  	tokens= new StringTokenizer(ligne," ");
            	  	num1=tokens.nextToken();
            	  	h=Integer.parseInt(tokens.nextToken());
            	  	mn=Integer.parseInt(tokens.nextToken());
            	  	heure1=new Horaire(h,mn);
            	  	ville=tokens.nextToken();
            	  	avion=tokens.nextToken();
            	  	volD=new VolDepart(num1, heure1, ville, avion,"Decolle");
            	  	lesVols.ajouter(volD); // ajoute a la liste
            	  	System.out.println("] \t\t\t ["+num1+" : depart: "+heure1+" \t("+ville+")]");
     
            	  	// on creer les sejours au fur et a mesure de la lecture du fichier vol
    				// on se contente d'attribuer le sejour sans se preoccuper du parking pour l'instant
    				// (on indique un point a la place du nom de parking)
            	  	avionS=((ListeAvions) lesAvions).trouveAvion(avion);
            	  	sejour=new Sejour(volA,volD,avionS,null);
            	  	lesSejours.ajouter(sejour); // constitution liste des sejours
                }
     
                System.out.println ("] *** fin de traitement "+nomFichier);
     
     
            }
            catch(IOException e)
            {
            	System.out.println ("Probleme lecture "+nomFichier);
            }
     
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
     
    // Sejour.java
    package aeroport;
     
     
     
    import java.util.*;
     
    public class Sejour implements Comparable<Sejour>
    {
    	private Vol volArr, volDep;
    	private Avion avion;
    	private Parking numParking;
     
    	public Sejour()
    	{}
     
    	//
    	// creation avec comme parametres
    	// numero vol arrivee, numero vol depart, numero avion, nom de parking ("." si pas encore attribue),
    	// heure d'arrivee, heure de depart
    	// L'occupation sera cree en fonction de l'heure d'arrive plus heure depart
    	//
    	public Sejour(Vol arrive, Vol depart, Avion av, Parking nParking) 
    	{
    		volArr=arrive;
    		volDep=depart;
    		avion=av;
    		numParking=nParking;		
    	}
     
    	public void putParking(Parking parkingAttribue)
    	{
    		numParking=parkingAttribue;
    	}
     
     
    	public static void DebutFin()
    	{
     
    	}
     
    	public TrancheHoraire getOccupation()
    	{
    		return new TrancheHoraire(volArr.getHeure(),volDep.getHeure());
    	}
     
    	// Methodes pour
    	// Classer les Sejours par heure d'arrivee
    	//
     
    	public Horaire getDebut()
    	{
    		return volArr.getHeure();
    	}
     
    	public Parking getParking()
    	{
    		return numParking;
    	}
     
    	public Vol getVolAtterrit()
    	{
    		return volArr;
    	}
     
    	public Vol getVolDecolle()
    	{
    		return volDep;
    	}
     
    	public Avion getAvion()
    	{
    		return avion;
    	}
     
    	public void initialiseParking(Parking parkingTrouve)
    	{
    		numParking=parkingTrouve;
    	}
     
    	/*
    	 * Compare 2 sejour par l'heure d'arrivee,
    	 * retourne result, negatif, nul ou positif en fonction de la reponse du test
    	 */
    	public int compareTo(Sejour sejour) {
    		Horaire s1,s2;
    		int result;
    		s1=volArr.getHeure();
    		s2=sejour.volArr.getHeure();
    		result=s1.compareTo(s2);
    		return result; // renvoit result negatif, nul ou positif, selon la comparaison s1 et s2 
    	}
     
    	/*
    	 * Methodes pour parquer un sejour
    	 * renvoie un parking, null si non trouve
    	 */
     
     
    	public Parking parker(ListeParkings lesParkings)
    	{
    		Parking parkingTrouve=null;
    		if (numParking.equals(parkingTrouve))
    		{ // on ne cherche que si pas deja un parking pour ce sejour
    			TrancheHoraire plage=new TrancheHoraire(volArr.getHeure(),volDep.getHeure());
    			parkingTrouve=lesParkings.trouveParking(plage);
    			return parkingTrouve;
    		}
    		return numParking;
    	}
     
     
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
    // ListeSejours.java
     
    package aeroport;
     
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Collection;
     
    public class ListeSejours
    {
    	private static ArrayList<Sejour> listeS;
        /* constructeurs */
    	public ListeSejours()
    	{
    		 listeS = new ArrayList();
    	}
     
        public boolean estvide(){
            return listeS.isEmpty();
        }
        public void ajouter(Sejour o){
            listeS.add(o);
        }
        public void enlever(Sejour o){
            listeS.remove(o);
        }
        public boolean contient(Sejour o){
            return listeS.contains(o);
        }
        public int taille(){
            return listeS.size();
        }
        public String toString(){
            return listeS.toString();
        }
        public ArrayList<Sejour> getListe(){
            // System.out.print("... ");
        	return listeS;
        }
     
    	public static void classer()
    	{
    		Collections.sort(listeS);
    		// Collections.sort(lesSejours);
    	}
     
    	public static void afficher()
    	{
    		for(Sejour i : listeS)
    		{
    			System.out.println(i.toString());
    		}
    	}
     
    	/*
    	 * retourne une partie de la liste des sejours
    	 * : uniquement les sejours des avions hors contact
    	 */
    	public ListeSejours horsContact()
    	{
    		Avion av;
    		ListeSejours listeHC=null;
    		for (Sejour s : listeS)
    		{
    			av=s.getAvion();
    			if (av instanceof AvionGros)
    			{
    				((List<Sejour>) listeHC).add(s);
    			}			
    		}
    		return listeHC;
    	}
     
    	/*
    	 * retourne une partie de la liste des sejours
    	 * : uniquement les sejours des avions en contact
    	 */
    	public ListeSejours enContact()
    	{
    		Avion av;
    		ListeSejours listeEC=null;
    		for (Sejour s : listeS)
    		{
    			av=s.getAvion();
    			if (av instanceof AvionPetit)
    			{
    				((List<Sejour>) listeEC).add(s);
    			}			
    		}
    		return listeEC;
    	}
     
    	/*
    	 * Attribue les parkings depuis la liste passee en parametre
    	 */
    	public boolean attribuerParking(ListeParkings lesParkings)
    	{
    		boolean reussi=false;
    		Parking parkingAttribue=null;
    		/*
    		 * On boucle sur la liste des sejours
    		 */
    		for (Sejour s : listeS)
    		{
    			if (s.getParking().equals(null))
    			{
    				// on ne traite que si un parking n'est pas deja attribue
    				parkingAttribue=s.parker(lesParkings);
    				if (!(parkingAttribue.equals(null)))
    				{
    					s.putParking(parkingAttribue);
    				}
    			}
    		}
    		return reussi;
    	}
     
     
     
    }

  4. #24
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Citation Envoyé par lylandra6 Voir le message
    Il y-a aussi un probleme de pointeur null
    java.lang.NullPointerException
    sur la ligne
    System.out.print(sejoursHorsContact.taille());
    Donne l'erreur en entier (avec stack trace).
    Je ne vais pas m'amuser à lire tout ton code, mais après un coup d'oeil rapide,je vois déjà un problème dans la méthode horsContact, et dans les méthodes similaires, où tu essaies d'ajouter des éléments dans une liste initialisée à null. Du coup il me semble que ton programme devrait échouer avant même l'instruction que tu cites.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 9
    Dernier message: 28/05/2008, 02h06
  2. Réponses: 4
    Dernier message: 19/06/2007, 10h41
  3. [C#] Tri d'objet dans une ArrayList
    Par guillaume16 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 14/03/2006, 12h05
  4. Message d'erreur lors d'utilisation d'un Objet
    Par dirty_boy dans le forum Langage
    Réponses: 3
    Dernier message: 28/10/2005, 16h16
  5. Réponses: 4
    Dernier message: 25/10/2005, 08h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo