Programmer en Java
OC Informatique 14 – 15
GYMNASE DE BURIER
Table des mati`eres
1 Greenfoot
1.1 Concepts de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Gros chat
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Le monde du crabe
3 De l’environnement int´egr´e `a la ligne de commande
3.1 La structure de base d’un premier programme Java . . . . . . . . . . . . . . . .
3.2 La ligne de commande du Mac . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Compilation bidon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4 Structure d’un programme Java autonome
4.1 La m´ethode main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Un tout petit premier programme . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 Un exemple un peu plus complexe . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4 Pour passer des param`etres
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 G´en´eralit´es sur Java
6 Quelques exercices d’entraˆınement
6.1 Faire calculer la machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2
Instructions r´ep´etitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3 Donn´ees num´eriques
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4 Donn´ees alphanum´eriques
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.5 Pour commencer avec les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . .
7 La programmation objet en Java
7.1 Classes et Objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2 Une classe et ses m´ethodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3 La notion de constructeur
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4 L’accessibilit´e aux attributs d’une classe
. . . . . . . . . . . . . . . . . . . . . .
7.4.1 La notion d’accesseur . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4.2 La notion de mutateur . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4.3 Les attributs statiques . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
3
4
8
11
11
12
15
16
16
17
18
19
21
25
25
25
26
27
28
29
29
31
34
35
36
37
37
1
7.5 L’h´eritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5.1
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5.2 Un exemple complet
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8 Exercices sur les objets en java
8.1 Figures g´eom´etriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2 La citerne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.3 Thermometre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.4 Devinez un nombre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.5 Ville et Capitale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.6 Jouer avec des d´es
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.7 Les Schtroumpfs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.8 Le Village Schtroumpf
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.9 Exercices sur les tableaux et les boucles . . . . . . . . . . . . . . . . . . . . . . .
8.10 Listes dynamiques en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.11 La classe Personne
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.12 Exercices divers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.13 Les piles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9 Le point de d´epart : JFrame
10 Deux niveaux d’interface
10.1 Composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.2 Contenants
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.3 Description de la JFrame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11 Les gestionnaires de mise en forme
12 Les ´ev´enements
38
38
40
43
43
45
47
47
48
49
50
52
53
56
57
58
62
64
65
65
65
66
67
69
v. 2.0 – Aoˆut 2014
1 Greenfoot
1.1 Concepts de base
Exercice 1.1
On voit ci-dessous le menu contextuel associ´e `a un wombat du sc´enario leaves-and-wombats.
a) ´Etablir une liste de toutes les m´ethodes du Wombat.
b) Dans la liste de la question a), chercher toutes les m´ethodes sans valeur de retour.
c) Dans la liste de la question a), chercher toutes les m´ethodes qui renvoient une valeur. Donner
´egalement le type de la valeur de retour.
d) D´ecrire pr´ecis´ement chaque mot figurant dans l’en-tˆete de la m´ethode setDirection.
e) Donner la liste de toutes les valeurs que peut renvoyer la m´ethode canMove.
f) Donner quelques exemples de valeurs que peut renvoyer la m´ethode getLeavesEaten.
g) Quelle est la m´ethode de la classe Wombat qui demande un param`etre ? Quel est le type de ce
param`etre ?
h) Que signifie le mot-clef void ?
Exercice 1.2
On donne le sc´enario cars, dans lequel on trouve la classe Car. Ouvrir ce sc´enario.
a) Est-ce qu’un objet de type Car existe `a l’ouverture du sc´enario ?
b) Est-ce que la classe Car existe `a l’ouverture du sc´enario ?
c) Combien d’objets de type Car peut-on cr´eer dans ce sc´enario ?
d) Cr´eer quelques voitures. Ces voitures sont-elles diff´erentes ?
e) Cliquer le bouton Act. Comment interpr´eter le r´esultat qui s’affiche `a la console ?
f) Remettre le sc´enario a z´ero en cliquant le bouton Reset. Cr´eer une voiture dans la premiere
colonne. A l’aide d’un appel a la bonne m´ethode, faire se d´eplacer la voiture de deux cases
vers la droite.
3
Exercice 1.3
R´ediger l’en-tˆete d’une m´ethode publique nomm´ee send, disposant d’un param`etre de type String,
et qui ne renvoie pas de valeur.
Exercice 1.4
R´ediger l’en-tˆete d’une m´ethode publique nomm´ee moyenne, disposant de deux param`etres, tous
deux de type int, et qui renvoie une valeur int.
Exercice 1.5
Voici le diagramme de classe des acteurs du sc´enario leaves-and-wombats
On donne ´egalement les en-tˆetes des classes figurant dans ce diagramme `a l’exception de la classe
Actor.
public class Wombat extends Actor
public class Leaf extends Actor
Dessiner le diagramme de classe des acteurs du sc´enario asteroids `a partir des en-tˆetes de classes
donn´es ci-dessous :
public class Explosion extends Actor
public class Mover extends Actor
public class Bullet extends Mover
public class Rocket extends Mover
Publicité
public class Asteroid extends Mover
1.2 Gros chat
Exercice 1.6
Observez les en-tˆetes de m´ethodes ci-dessous :
public void play()
public void addAmount(int amount)
public boolean hasWings()
public void compare(int x, int y, int z)
public boolean isGreater (int number)
4
Pour chaque en-tˆete, r´epondez aux questions suivantes :
a) Quel est le nom de la m´ethode ?
b) La m´ethode retourne-t-elle une valeur ?
Si c’est le cas, quelle est le type de la valeur de retour ?
c) Combien de param`etres a la m´ethode ?
Exercice 1.7
´Ecrivez l’en-tˆete d’une m´ethode dont le nom est “go”. La m´ethode n’a pas de param`etre et ne
retourne aucune valeur.
Exercice 1.8
´Ecrivez l’en-tˆete d’une m´ethode dont le nom est process. La m´ethode a un param`etre de type int
intitul´e “number” et elle retourne une valeur de type int.
Exercice 1.9
Sur papier, ´ecrivez un appel de m´ethode pour la m´ethode play de l’exercice 1. Donnez un autre
appel de m´ethode pour la m´ethode addAmount de l’exercice 1.
5
Exercice 1.10
On donne ci-dessous les m´ethodes de la classe Cat du sc´enario fatcat.
´Ecrire la m´ethode act de votre chat en respectant les deux points suivants simultan´ement :
a) si le chat s’ennuie, il danse et crie “Hooray” ;
b) s’il ne s’ennuie pas, il se d´eplace `a gauche de cinq unit´es et, dans ce cas seulement, s’il est
fatigu´e, il dort durant trois unit´es de temps.
Tous les exercices qui suivent sont destin´es `a ˆetre faits dans le sc´enario Greenfoot : fatcat.
Ouvrez le sc´enario dans Greenfoot avant de poursuivre.
Pour t´el´echarger ce nouveau sc´enario :
http://www.greenfoot.org/book/etudes/code/fatcat.zip
Exercice 1.11
Ouvrez le code la classe Cat dans l’´editeur. Assurez-vous que l’´editeur est en mode de documentation.
De combien de m´ethodes dispose la classe Cat ?
Exercice 1.12
Combien de m´ethodes de la classe Cat retournent une valeur ?
Exercice 1.13
Combien de param`etres contient la m´ethode sleep ?
6
Exercice 1.14
Essayez d’appeler certaines m´ethodes de votre chat de fa¸con interactive, en utilisant le menu contex-
tuel du chat. Les m´ethodes int´eressantes proviennent toutes de Inherited from Cat.
Exercice 1.15
Est-ce que le chat s’ennuie ? Comment pouvez-vous faire pour qu’il ne s’ennuie pas ?
Exercice 1.16
Ouvrez l’´editeur pour la classe MyCat. (C’est l`a que vous allez ´ecrire le code pour tous les exercices
suivants.)
Faites manger le chat quand il agit. (C’est a dire : Dans la m´ethode act, ´ecrire un appel a la m´ethode
eat.) Compiler. Testez en appuyant sur le bouton Act dans le panneau de contrˆole de l’ex´ecution.
Exercice 1.17
Faites danser le chat. (Ne pas le faire de fa¸con interactive - ´ecrivez du code dans la m´ethode act
pour ce faire. Lorsque vous avez termin´e, cliquez sur le bouton Act dans le panneau de contrˆole de
l’ex´ecution.)
Exercice 1.18
Faites dormir le chat.
Exercice 1.19
Faites ex´ecuter `a votre chat une s´equence d’actions de votre choix, choisies parmi celles qui sont
disponibles.
Exercice 1.20
Changer la m´ethode act de votre chat afin que, lorsque vous cliquez Act, si le chat est fatigu´e, il
dort un peu. Si il n’est pas fatigu´e, il ne fait rien.
Exercice 1.21
Changer la m´ethode act de votre chat pour qu’il danse s’il s’ennuie. (Mais seulement s’il s’ennuie.)
Exercice 1.22
Changer la m´ethode act de votre chat pour qu’il mange s’il a faim.
Exercice 1.23
Modifier la m´ethode act de votre chat de la fa¸con suivante : Si le chat est fatigu´e, il dort un peu,
et puis il crie hooray. S’il n’est pas fatigu´e, il crie seulement hooray. (Pour les essais, faire en sorte
que le chat soit fatigu´e en appelant des m´ethodes de mani`ere interactive. Comment pouvez-vous
faire pour que le chat soit fatigu´e ?)
Exercice 1.24
Modifier le code de la m´ethode act de fa¸con `a obtenir le comportement suivant : Si votre chat est
seul, faites-le dormir. S’il n’est pas seul, faites le crier : hooray.
Testez en pla¸cant un deuxi`eme chat dans le monde avant de lancer Act.
7
2 Le monde du crabe
Exercice 2.1
Voici le code source de la classe CrabWorld du sc´enario little-crab-5
// imports Actor, World, Greenfoot, GreenfootImage
import greenfoot.*;
import java.util.Random;
import java.awt.Color;
public class CrabWorld extends World
{
/**
- Create the crab world (the beach). Our world has a size
- of 560x560 cells, where every cell is just 1 pixel.
*/
public CrabWorld()
{
super(560, 560, 1);
populateWorld();
}
/**
- Create the objects for the start of the game.
*/
public void populateWorld()
{
addObject(new Crab(), 300, 300);
addObject(new Lobster(), 90, 70);
addObject(new Lobster(), 390, 200);
addObject(new Lobster(), 360, 500);
addObject(new Worm(), 20, 500);
addObject(new Worm(), 30, 200);
addObject(new Worm(), 60, 90);
addObject(new Worm(), 80, 310);
addObject(new Worm(), 150, 50);
addObject(new Worm(), 210, 410);
addObject(new Worm(), 220, 520);
addObject(new Worm(), 380, 330);
addObject(new Worm(), 410, 270);
addObject(new Worm(), 530, 30);
}
}
On constate que les objets sont plac´es “a la main” les uns a la suite des autres. `A l’aide de l’instruction
while, modifier le code ci-dessus pour placer automatiquement un crabe, trois homards et dix vers
al´eatoirement sur l’´ecran `a l’ouverture du sc´enario.
8
On utilisera la m´ethode Greenfoot.getRandomNumber(int limit). ´Ecrire le code source de la
nouvelle m´ethode populateWorld.
Exercice 2.2
On a ajout´e au sc´enario little-crab-5 une sous-classe FatWorm de la classe Worm.
On donne ci-dessous le code source de la m´ethode lookForWorm de la classe Crab :
/**
- Check whether we have stumbled upon a worm.
- If we have, eat it. If not, do nothing. If we have
- eaten eight worms, we win.
*/
public void lookForWorm()
{
if ( canSee(Worm.class) )
{
eat(Worm.class);
Greenfoot.playSound(“slurp.wav”);
wormsEaten = wormsEaten + 1;
if (wormsEaten == 8)
{
Greenfoot.playSound(“fanfare.wav”);
Greenfoot.stop();
}
}
}
L’appel de m´ethode canSee(Worm.class) retourne true si le crabe voit un objet de la classe Worm
ou de sa sous-classe FatWorm.
9
Modifier la m´ethode lookForWorm de fa¸con `a ce que l’attribut wormsEaten soit augment´e de 2
lorsque le crabe mange un objet de la classe FatWorm, toutes choses restant ´egales par ailleurs.
R´e´ecrire completement la m´ethode lookForWorm ci-dessous, apres lui avoir fait les modifications
n´ecessaires. On veillera `a changer le commentaire...
10
3 De l’environnement int´egr´e `a la ligne de commande
Le fascicule “Introduction `a la programmation orient´ee objet avec Greenfoot”, tir´e du livre “In-
troduction to programming with Greenfoot” de Michael K¨olling donne un cours d’introduction
`a la programmation dans le cadre d’un environnement de programmation int´egr´e. L’environ-
nement int´egr´e Greenfoot fournit une fenˆetre graphique, un diagramme de classes, un tableau
commande du sc´enario (avec des boutons Run, Act, etc.) et un ´editeur de texte pour afficher et
modifier le code source d’une classe.
Nous supposons ici que l’environnement Greenfoot vous est familier et que vous avez compris
les bases de la programmation en Java qui sont expos´ees dans le fascicule “Introduction `a la
programmation orient´ee objet avec Greenfoot”. Nous allons maintenant nous int´eresser `a un
environnement beaucoup plus basique.
Il est tout `a fait possible de compiler un programme Java avec des outils plus simples, en
particulier si l’on se contente d’une interface utilisateur tr`es limit´ee. Nous pr´esentons ci-dessous
ce qu’il faut savoir au minimum pour pouvoir ex´ecuter de petits programmes ´ecrits en Java sur
une machine r´ecente.
Publicité
En bref, il faut un ´editeur de texte (Smultron pour Mac, ou Notepad++ pour Windows, par
exemple) et un compilateur. Tant sous Windows que sous OS X, un compilateur est d’acc`es
facile via une fenˆetre de terminal. Une fois ces deux outils r´eunis, on peut compiler et ex´ecuter
de petits programmes Java.
3.1 La structure de base d’un premier programme Java
Un programme Java comporte au moins un fichier qui doit contenir au minimum une classe
Java. La fenˆetre ci-dessous, copie d’´ecran d’une fenˆetre TextMate montre le programme ne
comportant que la classe Bidon, sans aucune instruction `a l’int´erieur du bloc form´e des accolades
qui suivent.
Notons le commentaire, ignor´e par le compilateur, mais essentiel pour le programmeur !
11
Nous pouvons compiler sans erreur un fichier de ce genre, pour peu qu’il ait ´et´e enregistr´e sous
le nom de Bidon.java. Le nom de la classe commence conventionnellement par une majuscule.
Le nom du fichier doit ˆetre identique au nom de la classe. Le code source correspondant est le
suivant :
/**
- Bidon.java - une classe vide dans un fichier texte.
- On ne peut pas faire plus simple!
*
- @version
- @author
*/
1.0
Thivent Besson
10 juin 2010
public class Bidon
{
}
Supposons maintenant que, tout comme le sugg`ere la copie d’´ecran plus haut, le code source
ci-dessus a ´et´e enregistr´e sur le disque dur de notre ordinateur. On pourra alors, `a l’aide d’un
compilateur, cr´eer un fichier Bidon.class, contenant du bytecode Java que la machine virtuelle
Java peut ex´ecuter. Pour cela, il faut acc´eder au compilateur. Le paragraphe suivant pr´esente
une introduction minimale `a la ligne de commande du Mac, qui expose comment compiler un
fichier Java.
Exercice 3.1
Dans votre ´editeur de texte, saisir le code source de la classe Bidon.java. Sauvegarder ce fichier texte
dans un dossier exercice 1 1, qui devra ˆetre plac´e dans le r´epertoire contenant tous vos exercices.
3.2 La ligne de commande du Mac
Sous OS X, le compilateur est install´e par d´efaut et on y acc`ede au moyen de la ligne de
commande du terminal Unix. Il suffit, pour acc´eder au compilateur, d’ouvrir une fenˆetre terminal
a l’aide de l’application portant le mˆeme nom. On obtient une fenˆetre qui ressemble a celle-ci :
La ligne de commande est un outil de gestion extrˆemement puissant. Nous nous bornerons `a
utiliser ici le compilateur Java. Pour pouvoir l’employer, il faut tout d’abord ˆetre en mesure
d’acc´eder au fichier contenant le code source Java. Le fichier est enregistr´e dans un dossier que
nous avons choisi : ici, le dossier Documents de notre session, qui contient lui-mˆeme un dossier
12
exercicesJava ; dans ce dernier, nous trouvons un dossier exercice 1 1, dans lequel finalement se
trouve notre fichier Bidon.java.
Il nous faut maintenant trouver le moyen d’acc´eder `a ce fichier depuis la ligne de commande.
Il faut savoir ici que lors de l’ouverture d’une fenˆetre terminal, le r´epertoire courant peut ˆetre
donn´e par la commande pwd, autrement dit : present working directory ; les commandes de la
ligne de terminal seront tr`es souvent de tels sigles. Voyons l’effet de la commande pwd :
Le r´epertoire courant est thiventbesson, sous-r´epertoire de Users, qui est le dossier contenant les
fichiers personnels de la session courante.
Exercice 3.2
Ouvrir une fenˆetre de l’application Terminal sur votre session. D´eterminer le r´epertoire courant et
l’ouvrir dans l’interface graphique du syst`eme d’exploitation de votre machine.
13
Pour obtenir la liste des fichiers contenus dans le r´epertoire courant, on utilise la commande ls
et on obtient :
On voit maintenant le dossier Documents dans la liste des sous-r´epertoires du r´epertoire courant.
Il faut trouver moyen de changer de r´epertoire pour se trouver `a l’int´erieur du dossier Documents.
Pour ce faire, on utilisera la commande cd, change directory. La commande
cd Documents
aura l’effet suivant :
En utilisant `a bon escient la commande cd encore deux fois, on peut se placer dans le dossier dans
lequel se trouve notre programme Bidon.java. Une v´erification au moyen de la commande ls
confirme que nous nous trouvons au bon endroit.
Exercice 3.3
Ouvrir une fenˆetre de l’application Terminal sur votre session. Faire en sorte que le r´epertoire courant
soit celui dans lequel se trouve votre fichier Bidon.java.
14
3.3 Compilation bidon
La compilation du fichier Bidon.java est maintenant un jeu d’enfant. Il suffit en effet d’´ecrire
la commande suivante :
javac Bidon.java
L’effet en est le suivant :
Apparemment, il ne s’est rien pass´e. La commande ls nous montre le contraire. En effet, le
compilateur a produit un fichier Bidon.class qui se trouve dans le r´epertoire courant.
Pour ex´ecuter un fichier apr`es compilation, on utilise simplement la commande java suivi du
nom du fichier sans l’extension .class. Essayons d’ex´ecuter notre “programme” Bidon, au
moyen de la commande java Bidon.
Exercice 3.4
Compiler le fichier Bidon.java et tenter d’ex´ecuter le fichier r´esultat Bidon.class avec la machine
virtuelle Java.
Nous aurions pu nous attendre a ce que l’ex´ecution se borne a ne rien faire. Mais nous obtenons
le message d’erreur suivant :
Exception in thread "main" java.lang.NoSuchMethodError: main
Il nous faut maintenant ´eliminer la cause de cette erreur. C’est le sujet du paragraphe suivant.
15
4 Structure d’un programme Java autonome
4.1 La m´ethode main
Force nous est de constater que la compilation d’une classe vide ne provoque pas d’erreur,
mais que la machine virtuelle charg´ee de l’ex´ecution ne trouve pas la m´ethode main de notre
programme. Tout programme java doit en effet comporter une m´ethode main charg´ee du fil
d’ex´ecution principal. La syntaxe de cette m´ethode est la suivante :
public static void main (String[] args)
{
// Code ex´ecutable `a cet endroit
}
Exercice 4.1
Editer le fichier Bidon.java et ajouter la m´ethode main au bloc vide suivant la d´eclaration de la
classe Bidon. Compiler ce nouveau fichier et v´erifier qu’il est ex´ecut´e sans erreur par la machine
virtuelle Java mˆeme s’il ne se passe rien `a l’ex´ecution.
En r´esum´e, un programme Java minimal est form´e d’une classe contenant une m´ethode main
comme ci-dessous.
/**
- Bidon.java - une classe contenant une m´ethode main vide
- le plus simple que l’on puisse faire sans erreur `a l’ex´ecution!
*
- @version
- @author
*/
1.0
Thivent Besson
10 juin 2010
public class Bidon
{
public static void main (String[] args)
{
}
}
La m´ethode main est une m´ethode statique qui n’est li´ee a aucune instance particuliere de la
classe dans laquelle elle se trouve.
Le param`etre String[] args de la m´ethode main permet de r´ecup´erer des arguments transmis
au programme au moment de son lancement.
Pour que le programme Bidon.java fasse vraiment quelque chose, nous allons mettre du code
source dans la m´ethode main.
16
4.2 Un tout petit premier programme
On veut ´ecrire ici un programme qui affiche les nombres de 1 `a 10, directement dans la fenˆetre
de terminal.
Il suffit d’utiliser une boucle for et d’appeler la m´ethode println() de l’objet System.out qui
est ici la fenˆetre de terminal dans laquelle nous travaillons depuis le d´ebut. Pour que la m´ethode
println() affiche le nombre voulu, on lui passe en param`etre le compteur i de la boucle for.
Exercice 4.2
Dans un dossier exercice 2 2, cr´eer un fichier CompteJusquaDix.java dans lequel ´ecrire le pro-
gramme d´ecrit ci-dessus. Compiler et lancer le r´esultat dans une fenˆetre terminal.
On donne ci-dessous la solution de l’exercice 2.2 :
/**
- CompteJusquaDix.java - une classe pour afficher
- les dix premiers nombres entiers
*
- @version
- @author
*/
1.0
Thivent Besson
10 juin 2010
public class CompteJusquaDix
{
public static void main (String[] args)
{
for (int i = 1; i <= 10; i += 1)
{
System.out.println(i)
}
}
}
Exercice 4.3
´Ecrire un programme qui affiche les 20 premiers multiples de 7. Compiler et lancer le r´esultat dans
une fenˆetre terminal.
17
4.3 Un exemple un peu plus complexe
On donne maintenant un exemple de code un peu plus ´elabor´e, utilisant des variables d´eclar´ees
dans la fonction main.
/**
des puissances successives d’un nombre et de constater
- AfficheLogarithmes.java - une classe permettant d’afficher les
- logarithmes
- que ce sont des multiples du logarithme du nombre de d´epart.
*
- @version
- @author
*/
Publicité
1.0
Thivent Besson
10 juin 2010
public class AfficheLogarithmes
{
public static void main (String[] args)
{
int n;
double base;
double nombre;
double resultat;
n = 5;
base = 2.0;
nombre = 2.4;
System.out.println();
for (int i = 1; i <= n; i += 1)
{
resultat = Math.log(Math.pow(nombre, i))/Math.log(base);
System.out.println("Le log en base "
+ base + " de " + nombre
+ " ´elev´e `a la puissance " + i
+ " vaut " + resultat);
}
resultat = Math.log(nombre)/Math.log(base);
System.out.println();
System.out.println("Ce sont les multiples de " + resultat);
System.out.println();
}
}
Exercice 4.4
Expliquer ce que fait le code ci-dessus.
18
Exercice 4.5
En vous inspirant de l’exemple ci-dessus, par exemple, inventer un petit programme qui utilise des
variables d´eclar´ees dans la fonction main. Tester le programme en question.
4.4 Pour passer des param`etres
On aimerait bien, a ce stade, pouvoir passer en parametre des nombres ou des chaˆınes de
caracteres a notre programme. Il suffit, pour ce faire, d’utiliser le tableau args d´efini dans l’en
tˆete de notre m´ethode main. Comme indiqu´e dans la liste des param`etres de cette m´ethode,
le tableau args est un tableau de chaˆınes de caractere. Aucun probleme donc pour passer
des chaˆınes de caracteres a notre programme. Mais nous aimerions r´ecup´erer des arguments
num´eriques. Pour ce faire, Java nous a pr´evu les m´ethodes de classe Integer.parseInt() et
Double.parseDouble(). Voici notre programme modifi´e :
/**
des puissances successives d’un nombre et de constater
- AfficheLogAvecParam.java - une classe permettant d’afficher les
- logarithmes
- que ce sont des multiples du logarithme du nombre de d´epart.
*
- On doit passer trois param
etresa la m´ethode main - depuis la ligne de commande: le nombre d’´etapes,
- la base du log et le nombre.
*
- @version
- @author
*/
1.0
Thivent Besson
10 juin 2010
public class AfficheLogAvecParam
{
public static void main (String[] args)
{
int n;
double base;
double nombre;
double resultat;
n = Integer.parseInt(args[0]);
base = Double.parseDouble(args[1]);
nombre = Double.parseDouble(args[2]);
System.out.println();
System.out.println("Les logarithmes de " + args[3]);
System.out.println();
for (int i = 1; i <= n; i += 1)
{
19
resultat = Math.log(Math.pow(nombre, i))/Math.log(base);
System.out.println("Le log en base "
+ base + " de " + nombre
+ " ´elev´e `a la puissance " + i
+ " vaut " + resultat);
}
resultat = Math.log(nombre)/Math.log(base);
System.out.println();
System.out.println("Ce sont les multiples de " + resultat);
System.out.println();
}
}
Pour passer les param`etres au programme on compile comme d’habitude et on appelle le pro-
gramme depuis la ligne de commande avec l’instruction suivante :
java AfficheLogAvecParam 5 2.0 3.5 "Thivent Besson"
Les parametres sont s´epar´es par un espace. Le premier parametre est un entier, les deux suivants
sont des codes a virgules et le dernier est une chaˆıne de caractere. On peut voir l’effet de cette
commande dans une fenˆetre terminal :
Exercice 4.6
Modifier votre programme invent´e a l’exercice pr´ec´edent de sorte a ce que l’appel de la ligne de
commande puisse lui passer des valeurs en param`etre. Compiler et faire ex´ecuter le r´esultat par la
machine virtuelle java, en ligne de commande, bien entendu.
On peut remarquer que notre programme ne fait quasiment pas usage du fait que Java est
un langage orient´e objet. Nous nous sommes born´es `a utiliser quelques m´ethodes de classes
pr´ed´efinies dans Java, mais nous n’avons instanci´e aucun objet dont nous aurions cr´e´e la classe
nous-mˆemes.
C’est normal, car l’un des buts de ce paragraphe du cours est de faire un peu de programmation
proc´edurale en Java, c’est `a dire de la programmation qui n’utilise pas le concept d’objet et qui
produit des suites d’instructions devant ˆetre trait´ees s´equentiellement.
Nous esp´erons par ce biais vous permettre d’entraˆıner les instructions de base du langage Java.
20
5 G´en´eralit´es sur Java
Exercice 5.1
Faire tourner un programme contenant l’instruction suivante :
System.out.println(i++);
Quel sera le nombre affich´e `a la console ?
Exercice 5.2
Comment peut-on connaˆıtre les parametres a fournir pour cr´eer un nouvel objet ? En consultant ...
a) les constructeurs
b) les m´ethodes
c) les packages
d) les librairies
Exercice 5.3
La m´ethode dont la signature est donn´ee ci-dessous se trouve dans la classe Math, comment faire
pour calculer le sinus de 1 radian ?
public static double sin (double angle);
a) Math m = new Math(); m.sin(1);
b) new Math().sin(1);
c) Math.sin(1);
d) Math.static.sin(1);
Exercice 5.4
Que va afficher cette instruction `a la console ?
System.out.println (4 + 5 + " enfants");
a) 45 enfants
b) 9 enfants
c) 0
d) 0 enfants
Exercice 5.5
Que vaut c apr`es l’ex´ecution du code suivant :
int a = 41, b = 10, c;
c = a / b;
a) 4.1
b) 4
c) 0
d) 1
21
Exercice 5.6
Cette d´eclaration private int age; est faite dans une classe Person.
O`u cette variable ne sera-t-elle pas visible ?
a) Dans les m´ethodes de la classe Person
b) Dans le corps de la classe Person
c) Dans le code qui utilise un objet de la classe Person
d) Nulle part, elle sera visible partout
Exercice 5.7
Le code ci-dessous est-il correct ?
int [] tab; //tableau d’entiers
for(int i=0 ; i<10 ; i++)
{
tab[i]=0;
}
Exercice 5.8
Quelle instruction faut-il utiliser pour cr´eer un nouveau tableau d’entiers de type int de 5 cases ?
a) Array t = new Array ("int", 5);
b) int t = new int[5];
c) int[] t = new int[5];
d) int[] t = new int[4];
e) Array t = new int[5];
Exercice 5.9
Que se produit-il si on compile et ex´ecute le programme suivant :
public class Test
{
public static void main(String []args)
{
int []t;
t = new int[4];
Publicité
for(int i = 0; i<= 4; i++)
System.out.print(t[i]);
}
}
a) 00000
b) 01234
c) il ne se compile pas
d) une erreur d’ex´ecution se produit
22
Exercice 5.10
Que manque-t’il pour que cette d´eclaration de m´ethode compile ?
public somme (int a, int b)
{
return a + b;
}
a) Rien du tout, c’est correct
b) Il manque le type de retour
c) On ne peut pas renvoyer directement a+b, il faut cr´eer une variable locale, y placer le r´esultat
de a+b puis la renvoyer
d) Il manque le modificateur private
Exercice 5.11
´Etant donn´e la d´efinition suivante de la classe Test, quelles m´ethodes donn´ees plus bas pourraient
ˆetre plac´ees apr`es le commentaire ?
public class Test
{
public void maMethode(int i, String s){}
//ici
}
a) public void maMethode(String s, int i)
b) public int maMethode(int i, String s)
c) public void maMethode(int i, String texte)
d) public void maDeuxiemeMethode(int i, String s)
Exercice 5.12
Pour la classe Info d´efinie ainsi :
public class Info
{
public Info()
{
System.out.println("Groupe");
}
public Info(int i)
{
this();
System.out.println(" OCI " + i);
}
}
Qu’affichera l’instruction suivante : Info x = new Info(2); ?
23
a) erreur de compilation
b) erreur d’ex´ecution
c) Groupe OCI 2
d) OCI 2
Exercice 5.13
Soit la classe C d´efinie ainsi :
public class C
{
public static int i;
public int j;
public C()
{
i++;
j=i;
}
}
Qu’affichera le code suivant :
C x = new C();
C y = new C();
C z = x;
System.out.println(z.i + " et " + z.j);
a) 2 et 2
b) 1 et 1
c) 2 et 1
d) 1 et 3
Exercice 5.14
Observer les classes suivantes :
public class Person
{
public void talk()
{
System.out.print("I am a Person ");
}
}
public class Student extends Person
{
public void talk()
{
24
System.out.print("I am a Student ");
}
}
Quel sera le r´esultat du morceau de code qui suit :
public class Test
{
public static void main(String[] args)
{
Person p = new Student();
p.talk();
}
}
a) I am a Person
b) I am a Student
c) I am a Person I am a Student
d) I am a Student I am a Person
6 Quelques exercices d’entraˆınement
Ces exercices sont tir´es du livre “Apprendre `a programmer avec Python 3” de G´erard Swinnen.
Pour vous aider `a faire ces exercices, il vous faudra peut-ˆetre une r´ef´erence r´esumant les ´el´ements
du langage Java vus jusqu’ici. Le site openclassrooms offre des explications de bonne qualit´e
et la page Bien commencer en Java du tutoriel de programmation en java vous sera sans doute
utile. L’URL du site est :
http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-java
6.1 Faire calculer la machine
Exercice 6.1
´Ecrire un programme qui calcule le volume d’un parall´el´epip`ede rectangle dont sont fournis au d´epart
la largeur, la hauteur et la profondeur.
Exercice 6.2
´Ecrire un programme qui convertit un nombre entier de secondes fourni au d´epart en un nombre
d’ann´ees, de mois, de jours, de minutes et de secondes (utiliser l’op´erateur modulo : %).
6.2
Instructions r´ep´etitives
Exercice 6.3
´Ecrire un programme qui affiche en colonne les 20 premiers termes de la table de multiplication
25
par 13, en signalant au passage `a l’aide d’un d´ecalage vers la droite ceux qui sont ´egalement des
multiples de 3.
Exercice 6.4
´Ecrire un programme qui affiche en colonne les n premiers termes de la table de multiplication par k,
en signalant au passage `a l’aide d’un d´ecalage vers la droite ceux qui sont ´egalement des multiples
de m. Les nombres n, m et k sont des entiers.
Exercice 6.5
´Ecrire un programme qui calcule les 50 premiers termes de la table de multiplication par 17, mais
n’affiche que ceux qui sont des multiples de 7.
Exercice 6.6
´Ecrire un programme qui calcule les n premiers termes de la table de multiplication par k, mais
n’affiche que ceux qui sont des multiples de m.
Exercice 6.7
´Ecrire un programme qui affiche un nombre donn´e de lignes avec sur chaque ligne un nombre d’´etoile
correspondant au num´ero de la ligne.
6.3 Donn´ees num´eriques
Exercice 6.8
´Ecrire un programme qui convertit en radians un angle fourni au d´epart en degr´es, minutes et
secondes.
Exercice 6.9
´Ecrire un programme qui convertit en degr´es, minutes et secondes un angle fourni au d´epart en
radians.
Exercice 6.10
´Ecrire un programme qui convertit en degr´es Celsius une temp´erature exprim´ee au d´epart en degr´es
Farenheit, ou l’inverse. La formule de conversion s’´ecrit :
TF = TC · 9
5
+ 32
Exercice 6.11
´Ecrire un programme qui calcule les int´erˆets accumul´es chaque ann´ee pendant 20 ans, par capitali-
sation d’une somme de 100 francs plac´ee en banque au taux fixe de 2.25%.
Exercice 6.12
Une l´egende de l’Inde ancienne raconte que le jeu d’´echecs a ´et´e invent´e par un vieux sage, que
son roi voulut remercier en lui affirmant qu’il lui accorderait n’importe quel cadeau en r´ecompense.
Le vieux sage demanda qu’on lui fournisse simplement un peu de riz pour ses vieux jours, et plus
pr´ecis´ement un nombre de grains de riz suffisant pour que l’on puisse en d´eposer un seul sur la
26
premiere case du jeu qu’il venait d’inventer, deux sur la suivante, quatre sur la troisieme, et ainsi de
suite jusqu’a la 64eme case.
Ecrire un programme Java qui affiche le nombre de grains `a d´eposer sur chacune des 64 cases du
jeu. Calculer ce nombre de deux mani`eres :
a) sous la forme d’un nombre entier de grains ;
b) en exprimant le nombre de grains en notation scientifique.
6.4 Donn´ees alphanum´eriques
Publicité