Que sera affiché par le code Java suivant

publicité
QUESTIONS DE RÉVISION POUR L’EXAMEN FINAL
Pour les questions 1-5,12 et 16 tester vos réponses en exécutant le code (copier-coller dans votre éditeur).
1)
Que sera affiché par le code Java suivant
On a les classes suivantes:
// bubu.java
import java.io.*;
class Bubu {
public int x;
public Bubu(int a) {
System.out.println( "++ Bubu debut");
x = a;
System.out.println( "++ Bubu x = " + x);
System.out.println( "++ Bubu fin");
}
public void detruire(){
System.out.println( "-- Bubu debut x = " + x);
System.out.println( "-- Bubu fin");
}
}
class Toto {
public Bubu bu;
public int y;
public Toto(int a, int b) {
System.out.println( "++ Toto debut");
y = b;
System.out.println( "++ Toto y = " + y);
bu = new Bubu(a);
System.out.println( "++ Toto fin");
}
public void detruire(){
System.out.println( "-- Toto debut y = " + y);
bu.detruire();
System.out.println( "-- Toto fin");
}
}
class Titi extends Toto {
int z;
Titi(int a, int b, int c) {
super(a, a+b) ;
System.out.println( "++ Titi debut");
z = c;
System.out.println( "++ Titi z = " + z);
System.out.println( "++ Titi fin");
}
public void detruire() {
System.out.println( "-- Titi debut z = " + z);
System.out.println( "-- Titi fin");
super.detruire() ;
}
}
class Test {
public static void main(String argv[]) throws IOException {
System.out.println( "main debut construction");
System.in.read(); //faire une attente à l’écran
Toto to = new Toto(1, 2);
System.out.println( "main milieu construction");
System.in.read();
Titi ti = new Titi(3, 4, 5);
System.out.println( "main fin construction");
System.out.println( "main debut destruction");
System.in.read();
1
ti.detruire();
ti = null;
System.out.println( "main milieu destruction");
System.in.read();
to.detruire();
ti = null;
System.out.println( "main fin destruction");
System.in.read();
}
}
2)
Que sera affiché par le code Java suivant
class Cle {
public int a;
public int b;
public Cle (int x, int y) { a = x; b = y; System.out.println ("++ cle " + this + " " + a + " " + b); }
public void detruire() { System.out.println ("-- cle " + this + " " + a + " " + b); }
}
class Coffre {
public Cle cle;
public Coffre(Cle c) { cle = c;
System.out.println ("++ coffre CLE " + this + " " + cle.a + " " + cle.b); }
public Coffre(int n) { cle = new Cle(100+n, 1000+n);
System.out.println ("++ coffre ENTIER " + this + " " + cle.a + " " + cle.b); }
public Coffre(Coffre c) { cle = new Cle(10+ c.cle.a, 10+ c.cle.b);
System.out.println ("++ coffre COFFRE " + this + " " + cle.a + " " + cle.b); }
public void detruire() { cle.detruire(); System.out.println ("-- coffre " + this); }
public static void main (String argv[]) { Cle cle1 = new Cle(1, 2);
Coffre c1 = new Coffre(cle1); Coffre c2 = new Coffre(3); Coffre c3 = new Coffre(c1);
c3.detruire() ; c2.detruire() ; c1.detruire() ; cle1.detruire() ;
}
}
3)
Que sera affiché par le code Java suivant
class R {
public static R notreR;
public static int j;
public int i;
public R monR;
public R(int a) { i = a; monR = null; j++; }
public static void p(R r) {
j = 0;
notreR = new R(0);
m(notreR);
}
public static void q(R r) {
System.out.print("R.notreR = "); n(notreR);
System.out.println("R.j = " + j);
}
public static void m(R r) {
System.out.println("R, i = " + r.i);
}
public static void n(R r) {
m(r);
System.out.print("monR = ");
if (r.monR!=null) r.monR.m(r.monR);
else System.out.println("null");
}
}
class S {
public static void main() {
R.p(null);
R r1 = new R(1);
R.notreR.monR = r1;
R r2 = new R(2);
2
System.out.print("r2 = ");
R.n(r2);
r1.monR = r2;
System.out.print("r1 = ");
R.n(r1);
R.q(r1);
}
}
4)
Que sera affiché par le code Java suivant
class Less {
public int n ;
public Less(int x) { n = x ; }
public String toString() { return "Less ! " ; }
public void test1() {
System.out.println("Less.test1 : " + this.toString());
}
public void test2() {
System.out.println("Less.test2 : " + this.n);
}
}
class More extends Less{
public int n ;
public More(int x, int y) { super(x) ; this.n = y ; }
public String toString() { return "More ! " ; }
public void test1() {
super.test1() ;
System.out.println(
"More.test1 : " + this.toString() + super.toString());
}
public void test2() {
super.test2() ;
System.out.println( "More.test2 : " + this.n + super.n);
}
public static void main(String argv[]) {
More m = new More(1, 2) ;
m.test1() ;
m.test2() ;
Less n = new Less(0) ;
n.test1() ;
n.test2() ;
}
}
5)
Soit la méthode récursive suivante :
public static int queFait(int n) {
if(n==0) return 0;
else if (n==1) return 1;
else return (n + queFait(n-2));
}
Donnez les valeurs retournées par les appels queFait(5) et queFait(6).
Donnez une version itérative de la méthode queFait.
6) Ecrivez une méthode qui retourne le nombre d'occurrences d'une sous-chaîne dans une chaîne.
7) Ecrivez un programme qui recopie, en l'inversant, une chaîne de caractères passée en argument de la ligne de
commande.
3
8) Ecrivez un programme qui inverse sans la recopier une chaîne de caractères passée en argument de la ligne
de commande.
9) Ecrivez une fonction qui recopie une chaîne de caractères passée en argument de la ligne de commande en
transformant les lettres majuscules en minuscules.
10) Ecrivez une méthode qui prend en argument une chaîne de caractères et qui retourne true si cette dernière
correspond à un nom de fichier ayant l'extension .htm, .html ou html*.
11) Ecrivez une méthode qui, étant donné un StringBuffer et un caractère, compte le nombre d'occurrences
de ce caractère.
12) Dites ce qui est affiché à l'écran lors de l'exécution du programme suivant, commentez les méthodes
echange
et echangeBis.
public class Mystere{
int a,b;
public Mystere(int i,int j){
a = i;
b = j;
}
public static void echange(Mystere x, Mystere y){
Mystere aux;
aux = x;
x = y;
y = aux;
}
public void echangeBis(Mystere x){
int aux=a;
a = x.a;
x.a = aux;
aux = b;
b = x.b;
x.b = aux;
}
public void affiche(){
System.out.println("a="+a+"b="+b);
}
public static void main(String argv[]){
Mystere u,v;
u = new Mystere(10,30);
v = new Mystere(40,50);
echange(u,v);
u.affiche();
v.affiche();
u.echangeBis(v);
u.affiche();
v.affiche();
}
}
13) Un filament d'ADN est constitué de deux brins comportant des bases azotées. Les quatre bases possibles
sont l'adénine (A), la cytosine (C), la guanine (G) et la thymine (T). Une portion d'un brin d'ADN se modélise
donc naturellement par un mot d'une longueur quelconque écrit avec les lettres A,C,G et T, on appellera un tel
mot Sequence.
Complétez les méthodes rechercheATC de la classe Sequence qui recherche la suite ``ATC'' dans une
séquence. Si cette suite existe, la méthode retourne l'indice auquel débute la première apparition de cette suite
(l'indice du A) sinon, elle retourne -1. Par exemple dans ``GTATCGCTATCGG'' la suite ``ATC'' est à la
position 2 par contre elle ne se trouve pas dans ``TATGG''. Vous pourrez bien sûr utiliser une ou des méthodes
de la classe String. Précisez la différence entre les 2 versions de la méthode.
4
class Sequence {
private String mot;
public Sequence(String m){
mot=m;
}
public int rechercheATC(){
// A FAIRE...
}
public static int rechercheATC(Sequence s) {
// A FAIRE...
}
}
14) Soit la classe Etudiant avec :
Nom
Prénom
Note
On suppose que la classe est déjà faite. Lire une série (décider de la condition arrêt)
de données et les placer dans le Vector etudiants. Demander à l’écran un Nom et Prénom
d’un étudiant, le chercher dans le Vector et afficher ses infos à l’écran (s’il existe,
sinon message erreur).
15)
Lire à l’écran une série de 25 nombres entiers. Les placer dans une matrice
(tableau à deux dimensions) de 5 lignes par 5 colonnes. Parcourir la matrice et afficher
la moyenne, le plus grand et la quantité de nombres négatifs.
16) Que fait la suite d'instructions suivante ?
class CompteEnBanque{
public static double tauxDeReference;
private double tauxInteret;
private char devise;
private int capital;
private boolean student;
static{
tauxDeReference = 0.05;
}
CompteEnBanque(){
tauxInteret = tauxDeReference + 0.03;
devise = 'B';
capital = 1000;
student = false;
}
CompteEnBanque(double taux, int cap){
tauxInteret = taux;
devise = 'B';
capital = cap;
student = false;
}
CompteEnBanque(double taux, int cap, char dev){
tauxInteret = taux;
devise = dev;
capital = cap;
5
student = false;
}
CompteEnBanque(boolean student){
tauxInteret = tauxDeReference + 0.01;
devise = 'E';
capital = 0;
this.student = student;
}
public double getTaux(){
return tauxInteret;
}
public int getCapital(){
return capital;
}
public char getDevise(){
return devise;
}
public boolean getStudent(){
return student;
}
}
public class OuvertureCompte{
public static void main(String[] argv){
CompteEnBanque[] comptes = new CompteEnBanque[4];
comptes[0] = new CompteEnBanque(true);
comptes[1] = new CompteEnBanque(0.12, 25000);
comptes[2] = new CompteEnBanque();
comptes[3] = new CompteEnBanque(0.1, 5600, 'D');
for (int i=0; i<4; i++){
System.out.println("Compte numero : " + (i+1));
System.out.println("Taux : " + comptes[i].getTaux());
System.out.println("Capital : " + comptes[i].getCapital());
if (comptes[i].getDevise() == 'B'){
System.out.println("Devise : francs belges");
}
else if (comptes[i].getDevise() == 'D'){
System.out.println("Devise : dollar");
}
else {
System.out.println("Devise : euro");
}
System.out.println("Student ? " + comptes[i].getStudent());
}
}
}
17) Vous devez créer un programme Java qui permettra de :
Lire dans le fichier etudiants.txt les données suivantes :

numéro d’un étudiant (taille maximale 4)
6


nom (40 caractères incluse également le prénom mais une seule variable pour le
référencer);
note (nombre réel).
et les placer dans un Vector vecEtudiant.
Après parcourir le Vector et afficher à l’écran le nom du meilleur(e) étudiant(e).
FIN
7
Téléchargement