IFT1176 – Session Automne 2004, Intra Michel Reid
IFT1176 - INTRA
Nom: __________________________________| Prénom(s): _____________________________|
Signature: ______________________________| Section: ____________________________|
Date : 20 octobre 2004
Durée: 2 heures (de 18h30 à 20h30)
Directives:
- Toute documentation permise.
- Calculatrice non-programmable permise.
- Répondez directement sur le questionnaire.
Soyez BREFS et PRÉCIS dans vos réponses.
1._____________________/15 Q1.1 Q1.2 Q1.3
2._____________________/30 Q2.1 Q2.2 Q2.3 Q2.4 Q2.5 3._____________________/20 Q3.1 Q3.2 Q3.3 Q3.4 Q3.5 4._____________________/35 Q4.1 Q4.2 Q4.3 Q4.4
Total:__________________/100
Question 1 (15 points)
Qu'allez-vous obtenir suite à la compilation puis l'exécution des programmes suivants (vous devez justifier votre réponse). S'il y a une erreur, indiquez la clairement. Si le programme compile et s'exécute, indiquez le résultat obtenu. Vous devez simuler une exécution donnée si nécessaire.
-
Q1.1
-public class TestA04{
static void test(int t[][], int n, int m){
for(int i=0; i<n; i++) try{
for(int j=0; j<m; j++)
System.out.print(t[i][j] +"\t");
}catch( ArrayIndexOutOfBoundsException e){
System.out.println("t[" + i +"]["+ j + "] n'existe pas");
} }
static void main(String[] args){
int[][] tab = { {1,2,3}, {1,2}};
test(tab,2,3);
} }
Correct Incorrect X
Pourquoi? (Courte explication) ET description des erreurs s'il y en a, sinon affichage produit.
la variable j est locale au bloc try
-
Q1.2
-class IntraException extends Exception{
public IntraException(){
super(“une exception est levee”);
} }
public class IntraA04{
public static void testException()throws IntraException{
throw new IntraException();
}
public static void main(String[] args){
try{
testException();
}catch(IntraException e){
System.out.println("traitement de l'exception " + e.getMessage()) ; }
finally {System.out.println("fin du programme");
} } }
Correct X Incorrect
Pourquoi? (Courte explication) ET description des erreurs s'il y en a, sinon affichage produit.
IntraException lancée par testException, mais non traitée localement. Elle est traitée par la méthode main.
affichage :
traitement de l'exception une exception est levee fin du programme
-
Q1.3
-public class IntraTest {
public static String test() {
try {
return “bon”;
}catch (Exception e) { return “pas bon”;
}
finally{
return “finalement”;
} }
public static void main(String args[]){
System.out.println(test());
} }
Correct X Incorrect
Pourquoi? (Courte explication) ET description des erreurs s'il y en a, sinon affichage produit.
La méthode test va traiter toutes les Exceptions possibles qui peuvent survenir lors de l’instruction return “bon”; Le finally va être exécuté et son return sera celui qui va transmettre le résultat.
affichage : finalement
Question 2 (30 points)
-Q2.1-
(5 pts) Soit menuItemCB la référence vers l’objet MenuItem libellé CheckButton dans l’application qui suit :Écrivez l’instruction nécessaire pour y associer son raccourci clavier :
menuItemCB .setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F10, 9));
-Q2.2-
(10 pts) Voici le code, sans erreur, d’une application : class CadreIntraA04 extends JFrame{
CadreIntraA04() {
// Les boutons
JButton bouton = new JButton("bouton");
bouton.setMnemonic('b');
JButton autreBouton = new JButton("un autre bouton");
autreBouton.setMnemonic('a');
// La barre de Menu
JMenuBar mb = new JMenuBar();
mb.setLayout(new BoxLayout(mb, BoxLayout.X_AXIS));
JMenu m = new JMenu("Fichier");
mb.add(m);
mb.add(Box.createGlue());
m = new JMenu("Aide");
mb.add(m);
setJMenuBar(mb);
Container c = getContentPane();
c.add(bouton,BorderLayout.WEST);
c.add(autreBouton,BorderLayout.EAST);
setTitle("Question 2");
pack();
setVisible(true);
}
public static void main(String[] argv) {
CadreIntraA04 monCadre = new CadreIntraA04();
} }
Dessinez l’application :
-Q2.3-
(5pts) Avec le code de la page précédente, la fenêtre va t’elle fermer correctement ?Oui Non X
Sinon, quelle(s) instruction(s) devrait-on ajouter : addWindowListener(new WindowAdapter () {
public void windowClosing (WindowEvent e) {System.exit(0);}
} );
ou setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-
Q2.4-
(5 pts) Voici 2 saisies d’écran pour le même programme, avant et après avoir modifié la taille de la fenêtre.Avant de redimensionner
Après avoir redimensionner
Quel type de disposition (Layout) a été utilisé ? ______FlowLayout_____________________
Justifiez :
Le second bouton se déplace vers la ligne suivante si la largeur n’est pas suffisante.
-
Q2.5-
(5 pts) Voici 2 saisies d’écran pour le même programme, avant et après avoir modifié la taille de la fenêtre.Avant de redimensionner
Après avoir redimensionner
Quel type de disposition (Layout) a été utilisé ? ____GridLayout_______________________
Justifiez :
Reste sur la même ligne et boutons ont la même taille
Question 3 (20 points)
Voici plusieurs blocs d'instructions pour les questions Q3.1 à Q3.5. Indiquez pour chaque bloc, s'il est correct ou pas (en cochant la bonne case), et dites pourquoi. Si le bloc est incorrect, corrigez l'erreur. Un bloc est dit incorrect, si au moins une des instructions lui appartenant est incorrecte. Par incorrect, nous entendons qu'une des instructions du bloc en question, génère une erreur lors de la compilation et/ou lors d'exécution.
-
Q3.1
- //bloc -1-ArrayList uneListe = new ArrayList();
uneListe.setElementAt( new Integer(123),0);
Correct Incorrect X
Pourquoi? (Courte explication) ET correction (si nécessaire) Pas de méthode setElementAt pour ArrayList
uneListe.set(0, new Integer(123));
-
Q3.2
- //bloc -2-Collection c1 = new TreeSet(new LinkedList());
Correct X Incorrect
Pourquoi? (Courte explication) ET correction (si nécessaire)
TreeSet a un constructeur qui reçoit une Collection en paramètre, LinkedList et TreeSet implémentent Collection.
-
Q3.3
- //bloc -3-TreeMap m2 = new Map();
Correct Incorrect X
Pourquoi? (Courte explication) ET correction (si nécessaire)
Map est une interface donc on ne peut créer une instance de Map correction :
TreeMap m2 = new TreeMap();
-
Q3.4
- //bloc -4-Map m1 = new HashMap();
…
Iterator I = (m1.keySet()).iterator();
while(I.hasNext())
System.out.println(m1.get(I.next()));
Correct X Incorrect
Pourquoi? (Courte explication) ET correction (si nécessaire)
méthode keySet de map retourne un Set qui a une méthode iterator et map a une méthode get qui reçoit un Object et retourne un Object
-
Q3.5
- //bloc -5-Collection cl = new ArrayList();
Collections.sort(cl);
Correct Incorrect X
Pourquoi? (Courte explication) ET correction (si nécessaire)
Collections.sort reçoit une List et non une référence sur une Collection correction :
List cl = new ArrayList();
ou
Collections.sort((List)cl);
Question 4 (35 points)
Nous désirons conserver les informations sur les enfants qui fréquentent une garderie dans un HashMap.
Les informations dont nous disposons sont :
Nom
prénom
adresse
numéro de téléphone
nom et prénom du parent responsable.
Tous ces champs sont des chaînes de caractères et peuvent être dupliqués.
Par contre, la combinaison : nom, prénom et numéro de téléphone est unique pour chaque enfant. Ces informations formeront la partie clé.
-
Q4.1
– (10 pts) Écrivez la classe nécessaire pour définir et gérer une clé, tout en vous assurant d’un fonctionnement adéquat dans un HashMap. Pour cela, vous devez redéfinir les méthodes equals et hashCode pour tenir compte des 3 champs de la clé.Remarque : la classe String possède déjà une méthode hashCode bien définie pour les String. Prévoyez aussi un constructeur.
public class EnfantCle{
private String nom, prenom, tel;
public EnfantCle(String n, String p, String t){
nom = n;
prenom=p;
tel=t;
}
public boolean equals(Object o){
if(!(o instanceof EnfantCle)) return false;
else {
EnfantCle autre = (EnfantCle) o;
if(!nom.equals(autre.nom)|| !prenom.equals(autre.prenom)||
!tel.equals(autre.tel)) return false;
else
return true;
} }
public int hashCode(){
return nom.hashCode()+prenom.hashCode()+tel.hashCode();
} }
-
Q4.2
– (8 pts) Écrivez la classe nécessaire pour définir et gérer la partie information. Redéfinissez la méthode equals. Prévoyez l’accès de chaque champs en lecture et un constructeur.public class EnfantInf{
private String adresse, parent;
public EnfantInf(String a, String p){
adresse = a;
parent = p;
}
public boolean equals (Object o){
if(!(o instanceof EnfantInf)) return false;
else {
EnfantInf autre = (EnfantInf) o;
if(!adresse.equals(autre.adresse)||
!parent.equals(autre.parent))
return false;
else
return true;
} }
public String getAdresse(){ return adresse;}
public String getParent(){return parent;}
}
-
Q4.3
– (5 pts) Écrivez les instructions nécessaires pour déclarer, créer la Map et y ajouter les informations suivantes :Nom prénom adresse Tél. parent
Faubert Allard, Jean-François, 29 ch. de la Tour, 343-6111, Allard, Marie Tremblay Allard, Miryam, 29 ch. de la Tour, 343-6111, Tremblay Jean HashMap enfants = new HashMap();
enfants.put(new EnfantCle("Faubert Allard","Jean-Francois","343-6111"), new EnfantInf("29 ch de la Tour", "Allard Marie"));
enfants.put(new EnfantCle("Tremblay Allard","Myriam","343-6111"), new EnfantInf("29 ch de la Tour", "Tremblay Jean"));
-
Q4.4
– (12 pts) Écrivez les instructions nécessaires pour trouver l’adresse de Tremblay Allard, Miryam, 343-6111, et afficher tous les parents responsables qui se trouvent à cette adresse.Remarque : Plusieurs enfants peuvent habiter une même adresse.
EnfantCle myriam= new EnfantCle("Tremblay Allard","Myriam","343-6111");
EnfantInf info = (EnfantInf) enfants.get(myriam);
Collection valeurs = enfants.values();
Iterator i = valeurs.iterator();
while(i.hasNext()) {
EnfantInf courant= (EnfantInf)i.next();
if(courant.getAdresse().equals(info.getAdresse())) System.out.println(courant.getParent());
}