E Java: Xamen de

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 8

EXAMEN DE JAVA

2008-2009

Consignes : sans documents.


Durée : 2h
Recommandations : Le code doit être écrit en JAVA (pas de pseudo-code ou de littérature
personnelle). Les correcteurs savent que vous n’êtes pas des compilateurs, donc ils ne seront
pas regardant sur les ‘ ;’ mais n’exagérez pas !
Si le sujet vous paraît trop long, c’est normal !!! Ne vous inquiétez pas : essayez d’en faire
le maximum et surtout de BIEN faire ce que vous faites.

EXERCICE 0 : QCM
Bonne réponse =1pt ; mauvaise réponse = -0.5pt ; pas de réponse=0pt.

1. Pour la classe D définie comme suit :


class D {
public int x ;
public D() {x=3 ; } ;
public D( int a){this() ; x=x+a ;} ;
public D( int a, int b){this(b) ; x= x-a ;}
}

qu’affichera le code suivant ?

D a = new D(5,6) ;
System.out.println(a.x) ;

a. 4
b. 3
c. 2
d. 1

2. Qu’est-ce qui est faux pour les interfaces ?


a. Une I. peut être instanciée
b. Une I. peut être implémentée
c. Une I. déclare des méthodes sans les implémenter
d. Une I. peut être le type d’une référence

3. Etant donné que la classe Triangle hérite de la classe Figure, trouvez une ligne
correcte parmi les suivantes
a. Figure y = new Figure() ; Triangle x = (Triangle)y ;
Figure z = (Figure)x ;
b. Triangle x = new Triangle() ; Figure y = x ;
Triangle z = (Triangle)y ;
c. Figure y = new Figure() ; Triangle x = (Triangle)y ;
Figure z = x ;
d. Triangle x = new Triangle(); Object y = (Object)x;
Triangle z = y;
4. Quelle classe n’a pas de classe mère ?
a. une classe abstraite
b. Object
c. String
d. Orpheline

5. Pour les classes A et B définies comme suit :


class A {
public int x;
public A() {x=5; }
}

class B extends A {
public B() {x++;}
public B(int i){this(); x=x+i; }
public B(String s){super(); x--; }
}

qu’affichera le code suivant?

B b1 = new B(); B b2 = new B(2003); B b3 = new B(”Bonjour”);


System.out.println(b1.x + ” et ” + b2.x + ” et encore ” + b3.x
);

a. autre chose
b. 1 et 2004 et encore 2003
c. 1 et 2004 et encore 4
d. 6 et 2009 et encore 4

6. L’interprétation des programmes Java est effectuée par


a. AWT
b. JVM
c. JDK
d. API

7. Combien d’instances de la classe A crée le code suivant?


A x,u,v;
x = new A();
A y = x;
A z = new A();

a. Cinq
b. Aucune
c. Deux
d. Trois
8. Le code ci-dessous
class B {
private int x ;
private float y ;

public void setX( int x) {this.x=x ; }


public void setY( float y) {this.y=y ; }
}

est une illustration…


a. de l’héritage
b. du polymorphisme
c. de la cryptographie
d. de l’encapsulation

EXERCICE 1 : Questions de cours


1. Donnez votre propre définition du mot Layout utilisé pour la conception d’interfaces
graphiques en JAVA ?
2. Quelles sont les différences entre une interface et une classe abstraite, dans l’écriture
de leur code et dans leur rôle ?

EXERCICE 2 :
Voici 2 classes (placées dans 2 fichiers différents).
01 : public class A {
02 : public A(int i) {
03 : System.out.println(i);
04 : }
05 : public void m() {
06 : System.out.println("A");
07 : }
08 : }
09 :
10 : public class B extends A {
11 : public void m() {
12 : System.out.println("B");
13 : }
14 :
15 : public static void main(String[] args) {
16 : A a = new B();
17 : a.m();
18 : }
19 : }

On veut lancer l'exécution de la classe B.

Indiquez la bonne réponse et répondez à la question correspondante :


a. Ce code ne compile pas ; dire quelles lignes provoquent une erreur et la raison de l'erreur.
b. Ce code compile mais il y a une erreur à l'exécution ; dire sur quelle ligne et la raison de
l'erreur.
c. Il s'affiche quelque chose (A, B, par exemple) : dans ce cas, dire exactement ce qui
s'affiche.
d. Rien ne s'affiche à l'exécution.

EXERCICE 3 :
Même question qu'à l'exercice précédent mais on remplace à présent la classe B de l'exercice
précédent par ce code :
10 : public class B extends A {
11 : public B (int i) {
12 : super(i);
13 : System.out.println(i*2);
14 : }
15 :
16 : public void m() {
17 : System.out.println("B");
18 : }
19 :
20 : public static void main(String[] args) {
21 : A a = (A)new B(2);
22 : a.m();
23 : }
24 : }

EXERCICE 4 :
Voici 2 classes (placées dans 2 fichiers différents).
01 : public class A {
02 : public int m() {
03 : return 1;
04 : }
05 :
06 : public String toString() {
07 : return "A";
08 : }
09 : }
10 :
11 : public class TestA {
12 : public static void main(String[] args) {
13 : java.util.List liste = new java.util.ArrayList();
14 : liste.add(new A());
15 : liste.add(new A());
16 : String s = "";
17 : for(int i = 0; i < liste.size(); i++) {
18 : s += liste.get(i).toString();
19 : }
20: System.out.println(s);
21 : }
22 : }
Entourez la bonne réponse, et répondez à la question correspondante :
a. Ce code ne compile pas. Donnez le numéro de la ligne qui empêche la compilation.
Corrigez la ligne. Dites ce qui sera affiché par la méthode main.
b. Ce code compile mais provoque une erreur à l'exécution. Donnez le numéro de la ligne
qui provoque l'erreur. Corrigez l'erreur. Dites ce qui sera affiché par la méthode main.
c. Ce code s'exécute sans erreur. Dites ce qui sera affiché par la méthode main.

EXERCICE 5 : Coupe du monde de Rugby


C'est la coupe du monde de rugby et vous êtes chargé d'organiser et gérer les équipes et les
rencontres. Il est à noter que les règles et la composition d'une équipe ont été très simplifiées
pour les besoins du problème.

Voici un extrait de la classe Joueur :

class Joueur {
private static int nbPostes = 9;
private static final String postes[]={"pilier", "talonneur",
"arriere", "ailier", "demi d'ouverture", "demi de
melee","centre", "2eme ligne", "3eme ligne"};

}

Question 1 : classe Joueur


a) Complétez la classe Joueur sachant qu'un joueur a un nom et un poste (de type
String), et écrivez un constructeur à deux paramètres : le nom et le poste.
b) Écrire un deuxième constructeur sans paramètres qui appelle le premier avec 2 valeurs par
défaut.
c) Écrire les accesseurs des champs nbPostes, poste, postes (le tableau), et la méthode
toString() qui renverra le nom du joueur ainsi que son poste.

Question 2 : classe Equipe


La classe Equipe vérifie les caractéristiques suivantes : une équipe a un nombre de joueurs
(15), un pays (de type String) et un tableau de Joueur d'une longueur égale à son nombre de
joueurs.
a) Écrire cette classe avec un constructeur à un paramètre, le pays. Ce constructeur fera appel
au constructeur par défaut de la classe Joueur pour initialiser le tableau de joueurs. Écrire
aussi la méthode toString() qui renverra par exemple la chaîne : "Equipe de
France".
b) Écrire une méthode String listeJoueurs() qui renvoie la chaîne de caractères listant
les noms des joueurs de l'équipe avec leur poste.

Question 3 : classe Match


Écrivez la classe Match
a) Elle a comme champs les deux équipes se rencontrant ainsi que leurs scores respectifs et le
constructeur prend les deux équipes en paramètres, les scores étant mis à 0.
b) Écrire la méthode Equipe gagnante() qui renvoie l'équipe gagnante en fonction des
scores (renvoie null si les scores sont égaux)
Question 4 : classe CoupeDuMonde
Écriture de la classe CoupeDuMonde dont on donne le début :

class CoupeDuMonde {

static String[] lesPays={"France", "Angleterre", "Ecosse",


"Argentine", "Afrique-du-sud", "Irlande", "Fidji", "Nouvelle-
Zelande"};
private int annee;
private int nbEquipes=8;
private Equipe[] tabEquipes=new Equipe[nbEquipes];

}

a) Complétez le constructeur par défaut ci-dessous CoupeDuMonde() qui alloue chaque


élément du tableau tabEquipes.

CoupeDuMonde() {
annee=2007;
for (int i=0; i<nbEquipes; i++) {
…;
}
}

b) Compléter cette classe avec une méthode :

/* cree un match entre les equipes de rang i et j dans le tableau


tabEquipes*/
Match creerMatch(int i, int j)

c) Écrire la méthode toString() qui renvoie la chaîne de caractères listant les équipes
participant à la coupe du monde.

Question 5 : classe TestRugby


Écrivez la méthode main de la classe TestRugby. Cette méthode …
a) crée l'équipe d'un pays, une CoupeDuMonde et les affiche.
b) tire au sort deux équipes de la coupe et crée un match pour ces deux équipes.
c) calcule et affiche tous les talonneurs de toutes les équipes.
Indication : la comparaison de deux String en java se fait par la méthode equals héritée de
la classe Object. Par exemple si s1 et s2 sont deux String, leur comparaison se fait par
s1.equals(s2).

Voici un exemple d'exécution :

L' equipe d'Italie :


SALON (talonneur) BOXEHE (demi d'ouverture) QON (talonneur) ZOCU (pilier) VEZIDU
(talonneur) FAC (demi d'ouverture) REDYF (demi d'ouverture) NAK (arriere) GYNONE
(2eme ligne) BENAQ (pilier) BYMUWY (demi d'ouverture) VUD (demi de melee)
ROTOFA (pilier) ZULY (2eme ligne) LIB (talonneur)
Les equipes :
France Angleterre Ecosse Argentine Afrique-du-sud Irlande Fidji Nouvelle-Zelande

Les talonneurs de toutes les equipes :


Les talonneurs de l'equipe de France: CUFA
Les talonneurs de l'equipe de Angleterre: TUHIN
Les talonneurs de l'equipe de Ecosse: SYVARA
Les talonneurs de l'equipe de Argentine: CANIW TUF PIVY
Les talonneurs de l'equipe de Afrique du sud: WEQA
Les talonneurs de l'equipe de Irlande: REFY
Les talonneurs de l'equipe de Fidji: HOQUK FONOK
Les talonneurs de l'equipe de Nouvelle Zelande:

le premier match tire au sort : match Fidji Argentine


EXERCICE 6 : Exceptions
Quel est l’affichage produit par le programme suivant ?
import java.io.*;
public class Main {
static int I = 0;

public static void main(String args[]) {


for(I = 1; I <= 4; I++) {
System.out.println("I="+I);
try { MethodeA();}
catch (IOException E1) {
System.out.println("Le main a attrape "+E1.toString());
}
}
}

public static void MethodeA( ) throws IOException {


if(I == 1)
throw new IOException( "Exception lancee par MethodeA");
try { MethodeB( ); }
catch (IOException E2) {
System.out.println("MethodeA a attrape "+E2.toString());
throw E2;
}
System.out.println("Fin de l'execution de MethodeA");
}

public static void MethodeB( ) throws IOException {


try {
if(I == 3)
throw new IOException("Exception lancee par MethodeB");
}
finally {
System.out.println("Fin de l'execution de MethodeB");
}
MethodeC();
}

public static void MethodeC( ) throws IOException {


if(I == 4) {
try {
throw new IOException("Exception lancée par MethodeC");
}
catch ( ArithmeticException e ) {
System.out.println("Attrape par MethodeC");
}
finally {
System.out.println("Bloc finally de MethodeC");
}
}
}
}

Vous aimerez peut-être aussi