Vous êtes sur la page 1sur 5

Corrig : LBI --- Java TD 1

http://www.pps.jussieu.fr/~baro/enseignement/LBI/Java/TD1.corr.html

Corrig : LBI --- Java TD 1


// Fichier Hello.java public class Hello { public static void main(String[] args) { System.out.println("Hello World !") ; } }

Exercice 1 Introduction

1. Recopiez le programme ci-dessus dans un fichier nomm Hello.java. Pour le compiler utilisez la commande javac Hello.java et pour l'excuter, java Hello. Peut-on l'excuter directement sans utiliser la commande java ? Que se passe-t-il si le fichier s'appelle Hello2.java ?

Correction :
On ne peut l'excuter directement. La classe publique dfinie dans un fichier doit porter le mme nom que ce fichier, sinon, le compilateur (javac) signale une erreur.

Exercice 2 Lire la ligne de commande


Lire la ligne de commande s'avre beaucoup plus simple en Java qu'en C. On reoit comme argument de main un seul tableau (habituellement nomm args). On obtiens le nombre d'lments du tableau par args.length. Les arguments de la ligne de commande seront donc dans args[0] ... args[args.length-1]. 1. Modifiez ce programme pour que java Hello Toto produise l'affichage :
Hello Toto !

Que se passe-t-il si on ne donne pas d'argument sur la ligne de commande ? A l'aide d'une conditionnelle, rsolvez ce problme.

Correction :

if(args.length > 0) System.out.println("Hello " + args[0] + " !") ;

2. Modifiez maintenant le programme pour que pour chaque nom donn sur la ligne de commande, il affiche une ligne de salutation.

1 sur 5

24/09/2011 10:29

Corrig : LBI --- Java TD 1

http://www.pps.jussieu.fr/~baro/enseignement/LBI/Java/TD1.corr.html

Correction :

public class Hello2 { public static void main(String[] args) { for(int i=0 ; i < args.length ; i++) System.out.println("Hello " + args[i] + " !") ; } }

Exercice 3

1. crivez un programme Somme effectuant la somme du tableau : {1, 23, 12, -4, 6, 89, 2} et affichant le rsultat. 2. Dfinissez une mthode static, qui prendra en argument le tableau, qui effectuera le calcul et qui retournera la valeur obtenue. main ne sera responsable que de l'appel de la fonction et de l'affichage. Le prototype de la mthode est :
public static int somme(int[] tab)

3. Ajoutez la mthode produit et la mthode moyenne au programme.

Correction :

// Somme.java public class Somme { public static int somme(int[] tab) { int acc=0 ; for(int i=0 ; i<tab.length ; i++) acc = acc+tab[i] ; // ou acc += tab[i] ; return acc ; } public static int produit(int[] tab) { int acc=1 ; for(int i=0 ; i<tab.length ; i++) acc = acc*tab[i] ; return acc ; } public static int moyenne(int[] tab) { return somme(tab)/tab.length ; } public static void main(String[] args) { int[] t = {1, 23, 12, -4, 6, 89, 2} ; System.out.println("Somme : " + somme(t)) ; System.out.println("Produit : " + produit(t)) ; System.out.println("Moyenne : " + moyenne(t)) ; } }

2 sur 5

24/09/2011 10:29

Corrig : LBI --- Java TD 1

http://www.pps.jussieu.fr/~baro/enseignement/LBI/Java/TD1.corr.html

Exercice 4 Familiarisation
Essayer de provoquer les erreurs suivantes en modifiant un programme, observez le rsultat. 1. Erreurs de compilation : a. Variable non dclare. b. Mauvais arguments passs lors de l'appel d'une mthode. 2. A l'excution : a. Pas de fonction main. b. Dpassement des limites d'un tableau. c. Division par zro.

Exercice 5
Cet exercice ne doit pas tre fait sur machine ! Qu'affichent les programmes suivants : 1. public class Ex1a {
static int f1(int a, int b) { a++ ; b++ ; System.out.println(a+" "+b) ; a=a+b ; return a ; } public static void main(String[] args) { int a=2, b=3 ; System.out.println(a+" "+b) ; f1(b,a) ; System.out.println(a+" "+b) ; b = f1(b,a) ; System.out.println(a+" "+b) ; } }

Correction :

2 4 2 4 2

3 3 3 3 7 static void f(int[] a,int i,int k) { a[i] = k ; } public static void printtab(int[] tab) { for(int i=0;i<tab.length;i++) System.out.print(tab[i]+" ") ; System.out.println() ; } public static void main(String[] args) { int[] t = {1,2,3,4,5,6} ;

2. public class Ex2a {

3 sur 5

24/09/2011 10:29

Corrig : LBI --- Java TD 1

http://www.pps.jussieu.fr/~baro/enseignement/LBI/Java/TD1.corr.html

int[] u ; int[] v ; printtab(t) ; f(t,2,12) ; printtab(t) ; u = t ; f(u,1,0) ; printtab(u) ; printtab(t) ; v = (int [])t.clone() ; f(v,0,0) ; printtab(v) ; printtab(t) ; } }

Correction :

1 1 1 1 0 1

2 2 0 0 0 0

3 4 5 6 12 4 5 6 12 4 5 6 12 4 5 6 12 4 5 6 12 4 5 6

Exercice 6
crire un programme Occ.java lisant tous les arguments passs sur la ligne de commande et recherchant si le premier argument existe dans la suite de la ligne. Par exemple java Occ aaaa bbb AA cc affichera :
Non trouve

et java Occ aaaa bbb AA aaaa cc affichera :


Trouve

Correction :

public class Occ { public static void main(String[] args) { boolean res = false ; for(int i=1 ; i<args.length && !res ; i++) res = args[i].equals(args[0]) ; if(res) System.out.println("Trouve") ; else System.out.println("Non trouve") ; } }

4 sur 5

24/09/2011 10:29

Corrig : LBI --- Java TD 1

http://www.pps.jussieu.fr/~baro/enseignement/LBI/Java/TD1.corr.html

Exercice 7
On appelle palindrome un mot pouvant se lire indiffremment dans les deux sens : par exemple Laval, ici, le mot vide, etc. Plus formellement, un mot de longueur l est un palindrome si pour tout i<l, le caractre la position i est gal au caractre la position l-i-1. Cette notion peut galement s'appliquer une squence d'entiers. 1. crivez sur papier un algorithme vrifiant si un mot est un palindrome. 2. crivez une fonction en Java prenant en argument un tableau d'entier et renvoyant un boolen indiquant si le tableau est un palindrome. Vous crirez galement la mthode statique main permettant de tester cette fonction. 3. En utilisant la mthode charAt, crivez une autre fonction prenant cette fois ci une String en argument et vrifiant si c'est un palindrome. La chane vrifie sera rcupre par main sur la ligne de commande.

Correction :

public class Palindrome { public static boolean pal(String s) { int l = s.length() ; for(int i = 0 ; i<l/2 ; i++) if(s.charAt(i) != s.charAt(l-i-1)) return false ; return true ; } public static void main(String[] args) { for(int i=0 ; i<args.length ; i++) if(pal(args[i])) System.out.println(args[i] + " est un palindrome") ; else System.out.println(args[i] + " n'est pas un palindrome") ; } }

Exercice 8
crire la classe Tri.java contenant une mthode public static void bubble(int[] t) implmentant l'algorithme de tri bulle : Soit l la longueur du tableau t Pour i allant de 0 l-1 : Pour j allant de 1 l-i-1 :

si t[j]<t[j+1] permuter les deux valeurs.

This document was translated from LATEX by HEVEA.

5 sur 5

24/09/2011 10:29