Programmer en Java
OC Informatique 14 – 15
GYMNASE DE BURIER
Table des matières
1 Greenfoot
1.1 Concepts de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Gros chat
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Le monde du crabe
3 De l’environnement intégré à 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éthode main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Un tout petit premier programme . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 Un exemple un peu plus complexe . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4 Pour passer des paramètres
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 Généralités sur Java
6 Quelques exercices d’entraˆınement
6.1 Faire calculer la machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2
Instructions répétitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3 Données numériques
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4 Données alphanumériques
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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éthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3 La notion de constructeur
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4 L’accessibilité 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éritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5.1
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5.2 Un exemple complet
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8 Exercices sur les objets en java
8.1 Figures géométriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2 La citerne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.3 Thermometre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.4 Devinez un nombre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.5 Ville et Capitale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.6 Jouer avec des dés
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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épart : 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 événements
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ût 2014
1 Greenfoot
1.1 Concepts de base
Exercice 1.1
On voit ci-dessous le menu contextuel associé à un wombat du scénario leaves-and-wombats.
a) Établir une liste de toutes les méthodes du Wombat.
b) Dans la liste de la question a), chercher toutes les méthodes sans valeur de retour.
c) Dans la liste de la question a), chercher toutes les méthodes qui renvoient une valeur. Donner
également le type de la valeur de retour.
d) Décrire précisément chaque mot figurant dans l’en-tête de la méthode setDirection.
e) Donner la liste de toutes les valeurs que peut renvoyer la méthode canMove.
f) Donner quelques exemples de valeurs que peut renvoyer la méthode getLeavesEaten.
g) Quelle est la méthode de la classe Wombat qui demande un paramètre ? Quel est le type de ce
paramètre ?
h) Que signifie le mot-clef void ?
Exercice 1.2
On donne le scénario cars, dans lequel on trouve la classe Car. Ouvrir ce scénario.
a) Est-ce qu’un objet de type Car existe à l’ouverture du scénario ?
b) Est-ce que la classe Car existe à l’ouverture du scénario ?
c) Combien d’objets de type Car peut-on créer dans ce scénario ?
d) Créer quelques voitures. Ces voitures sont-elles différentes ?
e) Cliquer le bouton Act. Comment interpréter le résultat qui s’affiche à la console ?
f) Remettre le scénario a zéro en cliquant le bouton Reset. Créer une voiture dans la premiere
colonne. A l’aide d’un appel a la bonne méthode, faire se déplacer la voiture de deux cases
vers la droite.
3
Exercice 1.3
Rédiger l’en-tête d’une méthode publique nommée send, disposant d’un paramètre de type String,
et qui ne renvoie pas de valeur.
Exercice 1.4
Rédiger l’en-tête d’une méthode publique nommée moyenne, disposant de deux paramètres, tous
deux de type int, et qui renvoie une valeur int.
Exercice 1.5
Voici le diagramme de classe des acteurs du scénario leaves-and-wombats
On donne également les en-têtes des classes figurant dans ce diagramme à 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énario asteroids à partir des en-têtes de classes
donnés ci-dessous :
public class Explosion extends Actor
public class Mover extends Actor
public class Bullet extends Mover
public class Rocket extends Mover
public class Asteroid extends Mover
1.2 Gros chat
Exercice 1.6
Observez les en-têtes de méthodes 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ête, répondez aux questions suivantes :
a) Quel est le nom de la méthode ?
b) La méthode retourne-t-elle une valeur ?
Si c’est le cas, quelle est le type de la valeur de retour ?
c) Combien de paramètres a la méthode ?
Exercice 1.7
Écrivez l’en-tête d’une méthode dont le nom est “go”. La méthode n’a pas de paramètre et ne
retourne aucune valeur.
Exercice 1.8
Écrivez l’en-tête d’une méthode dont le nom est process. La méthode a un paramètre de type int
intitulé “number” et elle retourne une valeur de type int.
Exercice 1.9
Sur papier, écrivez un appel de méthode pour la méthode play de l’exercice 1. Donnez un autre
appel de méthode pour la méthode addAmount de l’exercice 1.
5
Exercice 1.10
On donne ci-dessous les méthodes de la classe Cat du scénario fatcat.
Écrire la méthode act de votre chat en respectant les deux points suivants simultanément :
a) si le chat s’ennuie, il danse et crie “Hooray” ;
b) s’il ne s’ennuie pas, il se déplace à gauche de cinq unités et, dans ce cas seulement, s’il est
fatigué, il dort durant trois unités de temps.
Tous les exercices qui suivent sont destinés à être faits dans le scénario Greenfoot : fatcat.
Ouvrez le scénario dans Greenfoot avant de poursuivre.
Pour télécharger ce nouveau scénario :
http://www.greenfoot.org/book/etudes/code/fatcat.zip
Exercice 1.11
Ouvrez le code la classe Cat dans l’éditeur. Assurez-vous que l’éditeur est en mode de documentation.
De combien de méthodes dispose la classe Cat ?
Exercice 1.12
Combien de méthodes de la classe Cat retournent une valeur ?
Exercice 1.13
Combien de paramètres contient la méthode sleep ?
Publicité
6
Exercice 1.14
Essayez d’appeler certaines méthodes de votre chat de façon interactive, en utilisant le menu contex-
tuel du chat. Les méthodes intéressantes 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’éditeur pour la classe MyCat. (C’est là que vous allez écrire le code pour tous les exercices
suivants.)
Faites manger le chat quand il agit. (C’est a dire : Dans la méthode act, écrire un appel a la méthode
eat.) Compiler. Testez en appuyant sur le bouton Act dans le panneau de contrôle de l’exécution.
Exercice 1.17
Faites danser le chat. (Ne pas le faire de façon interactive - écrivez du code dans la méthode act
pour ce faire. Lorsque vous avez terminé, cliquez sur le bouton Act dans le panneau de contrôle de
l’exécution.)
Exercice 1.18
Faites dormir le chat.
Exercice 1.19
Faites exécuter à votre chat une séquence d’actions de votre choix, choisies parmi celles qui sont
disponibles.
Exercice 1.20
Changer la méthode act de votre chat afin que, lorsque vous cliquez Act, si le chat est fatigué, il
dort un peu. Si il n’est pas fatigué, il ne fait rien.
Exercice 1.21
Changer la méthode act de votre chat pour qu’il danse s’il s’ennuie. (Mais seulement s’il s’ennuie.)
Exercice 1.22
Changer la méthode act de votre chat pour qu’il mange s’il a faim.
Exercice 1.23
Modifier la méthode act de votre chat de la façon suivante : Si le chat est fatigué, il dort un peu,
et puis il crie hooray. S’il n’est pas fatigué, il crie seulement hooray. (Pour les essais, faire en sorte
que le chat soit fatigué en appelant des méthodes de manière interactive. Comment pouvez-vous
faire pour que le chat soit fatigué ?)
Exercice 1.24
Modifier le code de la méthode act de façon à 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çant un deuxième 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énario 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és “a la main” les uns a la suite des autres. À l’aide de l’instruction
while, modifier le code ci-dessus pour placer automatiquement un crabe, trois homards et dix vers
aléatoirement sur l’écran à l’ouverture du scénario.
8
On utilisera la méthode Greenfoot.getRandomNumber(int limit). Écrire le code source de la
nouvelle méthode populateWorld.
Exercice 2.2
On a ajouté au scénario little-crab-5 une sous-classe FatWorm de la classe Worm.
On donne ci-dessous le code source de la méthode 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éthode 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éthode lookForWorm de façon à ce que l’attribut wormsEaten soit augmenté de 2
lorsque le crabe mange un objet de la classe FatWorm, toutes choses restant égales par ailleurs.
Réécrire completement la méthode lookForWorm ci-dessous, apres lui avoir fait les modifications
nécessaires. On veillera à changer le commentaire...
10
3 De l’environnement intégré à la ligne de commande
Le fascicule “Introduction à la programmation orientée objet avec Greenfoot”, tiré du livre “In-
troduction to programming with Greenfoot” de Michael Kölling donne un cours d’introduction
à la programmation dans le cadre d’un environnement de programmation intégré. L’environ-
nement intégré Greenfoot fournit une fenêtre graphique, un diagramme de classes, un tableau
commande du scénario (avec des boutons Run, Act, etc.) et un éditeur 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ées dans le fascicule “Introduction à la
programmation orientée objet avec Greenfoot”. Nous allons maintenant nous intéresser à un
environnement beaucoup plus basique.
Il est tout à fait possible de compiler un programme Java avec des outils plus simples, en
particulier si l’on se contente d’une interface utilisateur très limitée. Nous présentons ci-dessous
ce qu’il faut savoir au minimum pour pouvoir exécuter de petits programmes écrits en Java sur
une machine récente.
En bref, il faut un éditeur 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ès
facile via une fenêtre de terminal. Une fois ces deux outils réunis, on peut compiler et exécuter
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être ci-dessous, copie d’écran d’une fenêtre TextMate montre le programme ne
comportant que la classe Bidon, sans aucune instruction à l’intérieur du bloc formé des accolades
qui suivent.
Notons le commentaire, ignoré par le compilateur, mais essentiel pour le programmeur !
11
Nous pouvons compiler sans erreur un fichier de ce genre, pour peu qu’il ait été enregistré sous
le nom de Bidon.java. Le nom de la classe commence conventionnellement par une majuscule.
Le nom du fichier doit être 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ère la copie d’écran plus haut, le code source
ci-dessus a été enregistré sur le disque dur de notre ordinateur. On pourra alors, à l’aide d’un
compilateur, créer un fichier Bidon.class, contenant du bytecode Java que la machine virtuelle
Java peut exécuter. Pour cela, il faut accéder au compilateur. Le paragraphe suivant présente
une introduction minimale à la ligne de commande du Mac, qui expose comment compiler un
fichier Java.
Exercice 3.1
Dans votre éditeur de texte, saisir le code source de la classe Bidon.java. Sauvegarder ce fichier texte
dans un dossier exercice 1 1, qui devra être placé dans le répertoire contenant tous vos exercices.
3.2 La ligne de commande du Mac
Sous OS X, le compilateur est installé par défaut et on y accède au moyen de la ligne de
commande du terminal Unix. Il suffit, pour accéder au compilateur, d’ouvrir une fenêtre terminal
a l’aide de l’application portant le même nom. On obtient une fenêtre qui ressemble a celle-ci :
La ligne de commande est un outil de gestion extrêmement puissant. Nous nous bornerons à
utiliser ici le compilateur Java. Pour pouvoir l’employer, il faut tout d’abord être en mesure
d’accéder au fichier contenant le code source Java. Le fichier est enregistré dans un dossier que
nous avons choisi : ici, le dossier Documents de notre session, qui contient lui-même 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éder à ce fichier depuis la ligne de commande.
Il faut savoir ici que lors de l’ouverture d’une fenêtre terminal, le répertoire courant peut être
donné par la commande pwd, autrement dit : present working directory ; les commandes de la
ligne de terminal seront très souvent de tels sigles. Voyons l’effet de la commande pwd :
Le répertoire courant est thiventbesson, sous-répertoire de Users, qui est le dossier contenant les
fichiers personnels de la session courante.
Exercice 3.2
Ouvrir une fenêtre de l’application Terminal sur votre session. Déterminer le répertoire courant et
l’ouvrir dans l’interface graphique du système d’exploitation de votre machine.
13
Pour obtenir la liste des fichiers contenus dans le répertoire courant, on utilise la commande ls
et on obtient :
On voit maintenant le dossier Documents dans la liste des sous-répertoires du répertoire courant.
Il faut trouver moyen de changer de répertoire pour se trouver à l’intérieur du dossier Documents.
Pour ce faire, on utilisera la commande cd, change directory. La commande
cd Documents
aura l’effet suivant :
En utilisant à 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érification au moyen de la commande ls
confirme que nous nous trouvons au bon endroit.
Exercice 3.3
Ouvrir une fenêtre de l’application Terminal sur votre session. Faire en sorte que le répertoire 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’écrire
la commande suivante :
javac Bidon.java
L’effet en est le suivant :
Apparemment, il ne s’est rien passé. La commande ls nous montre le contraire. En effet, le
compilateur a produit un fichier Bidon.class qui se trouve dans le répertoire courant.
Pour exécuter un fichier après compilation, on utilise simplement la commande java suivi du
nom du fichier sans l’extension .class. Essayons d’exécuter notre “programme” Bidon, au
moyen de la commande java Bidon.
Exercice 3.4
Compiler le fichier Bidon.java et tenter d’exécuter le fichier résultat Bidon.class avec la machine
virtuelle Java.
Nous aurions pu nous attendre a ce que l’exécution se borne a ne rien faire. Mais nous obtenons
Publicité
le message d’erreur suivant :
Exception in thread "main" java.lang.NoSuchMethodError: main
Il nous faut maintenant éliminer la cause de cette erreur. C’est le sujet du paragraphe suivant.
15
4 Structure d’un programme Java autonome
4.1 La méthode main
Force nous est de constater que la compilation d’une classe vide ne provoque pas d’erreur,
mais que la machine virtuelle chargée de l’exécution ne trouve pas la méthode main de notre
programme. Tout programme java doit en effet comporter une méthode main chargée du fil
d’exécution principal. La syntaxe de cette méthode est la suivante :
public static void main (String[] args)
{
// Code exécutable à cet endroit
}
Exercice 4.1
Editer le fichier Bidon.java et ajouter la méthode main au bloc vide suivant la déclaration de la
classe Bidon. Compiler ce nouveau fichier et vérifier qu’il est exécuté sans erreur par la machine
virtuelle Java même s’il ne se passe rien à l’exécution.
En résumé, un programme Java minimal est formé d’une classe contenant une méthode main
comme ci-dessous.
/**
- Bidon.java - une classe contenant une méthode main vide
- le plus simple que l’on puisse faire sans erreur à l’exécution!
*
- @version
- @author
*/
1.0
Thivent Besson
10 juin 2010
public class Bidon
{
public static void main (String[] args)
{
}
}
La méthode main est une méthode statique qui n’est liée a aucune instance particuliere de la
classe dans laquelle elle se trouve.
Le paramètre String[] args de la méthode main permet de récupérer 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éthode main.
16
4.2 Un tout petit premier programme
On veut écrire ici un programme qui affiche les nombres de 1 à 10, directement dans la fenêtre
de terminal.
Il suffit d’utiliser une boucle for et d’appeler la méthode println() de l’objet System.out qui
est ici la fenêtre de terminal dans laquelle nous travaillons depuis le début. Pour que la méthode
println() affiche le nombre voulu, on lui passe en paramètre le compteur i de la boucle for.
Exercice 4.2
Dans un dossier exercice 2 2, créer un fichier CompteJusquaDix.java dans lequel écrire le pro-
gramme décrit ci-dessus. Compiler et lancer le résultat dans une fenêtre 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
Écrire un programme qui affiche les 20 premiers multiples de 7. Compiler et lancer le résultat dans
une fenêtre terminal.
17
4.3 Un exemple un peu plus complexe
On donne maintenant un exemple de code un peu plus élaboré, utilisant des variables déclarées
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épart.
*
- @version
- @author
*/
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
+ " élevé à 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éclarées dans la fonction main. Tester le programme en question.
4.4 Pour passer des paramètres
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éfini dans l’en
tête de notre méthode main. Comme indiqué dans la liste des paramètres de cette méthode,
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écupérer des arguments
numériques. Pour ce faire, Java nous a prévu les méthodes de classe Integer.parseInt() et
Double.parseDouble(). Voici notre programme modifié :
/**
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épart.
*
- On doit passer trois param
etresa la méthode main - depuis la ligne de commande: le nombre d’étapes,
- 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
+ " élevé à 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ètres 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éparés 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être terminal :
Exercice 4.6
Modifier votre programme inventé a l’exercice précédent de sorte a ce que l’appel de la ligne de
commande puisse lui passer des valeurs en paramètre. Compiler et faire exécuter le résultat 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é objet. Nous nous sommes bornés à utiliser quelques méthodes de classes
prédéfinies dans Java, mais nous n’avons instancié aucun objet dont nous aurions créé la classe
nous-mêmes.
C’est normal, car l’un des buts de ce paragraphe du cours est de faire un peu de programmation
procédurale en Java, c’est à dire de la programmation qui n’utilise pas le concept d’objet et qui
produit des suites d’instructions devant être traitées séquentiellement.
Nous espérons par ce biais vous permettre d’entraˆıner les instructions de base du langage Java.
20
5 Généralités sur Java
Exercice 5.1
Faire tourner un programme contenant l’instruction suivante :
System.out.println(i++);
Quel sera le nombre affiché à la console ?
Exercice 5.2
Comment peut-on connaˆıtre les parametres a fournir pour créer un nouvel objet ? En consultant ...
a) les constructeurs
b) les méthodes
c) les packages
d) les librairies
Exercice 5.3
La méthode dont la signature est donnée 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 à la console ?
System.out.println (4 + 5 + " enfants");
a) 45 enfants
b) 9 enfants
Publicité
c) 0
d) 0 enfants
Exercice 5.5
Que vaut c après l’exécution 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éclaration private int age; est faite dans une classe Person.
Où cette variable ne sera-t-elle pas visible ?
a) Dans les méthodes 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éer 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écute le programme suivant :
public class Test
{
public static void main(String []args)
{
int []t;
t = new int[4];
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écution se produit
22
Exercice 5.10
Que manque-t’il pour que cette déclaration de méthode 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éer une variable locale, y placer le résultat
de a+b puis la renvoyer
d) Il manque le modificateur private
Exercice 5.11
Étant donné la définition suivante de la classe Test, quelles méthodes données plus bas pourraient
être placées après 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éfinie 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écution
c) Groupe OCI 2
d) OCI 2
Exercice 5.13
Soit la classe C définie 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ésultat 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és du livre “Apprendre à programmer avec Python 3” de Gérard Swinnen.
Pour vous aider à faire ces exercices, il vous faudra peut-être une référence résumant les éléments
du langage Java vus jusqu’ici. Le site openclassrooms offre des explications de bonne qualité
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
Écrire un programme qui calcule le volume d’un parallélépipède rectangle dont sont fournis au départ
la largeur, la hauteur et la profondeur.
Exercice 6.2
Écrire un programme qui convertit un nombre entier de secondes fourni au départ en un nombre
d’années, de mois, de jours, de minutes et de secondes (utiliser l’opérateur modulo : %).
6.2
Instructions répétitives
Exercice 6.3
Écrire un programme qui affiche en colonne les 20 premiers termes de la table de multiplication
25
par 13, en signalant au passage à l’aide d’un décalage vers la droite ceux qui sont également des
multiples de 3.
Exercice 6.4
Écrire un programme qui affiche en colonne les n premiers termes de la table de multiplication par k,
en signalant au passage à l’aide d’un décalage vers la droite ceux qui sont également des multiples
de m. Les nombres n, m et k sont des entiers.
Exercice 6.5
Écrire 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
Écrire 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
Écrire un programme qui affiche un nombre donné de lignes avec sur chaque ligne un nombre d’étoile
correspondant au numéro de la ligne.
6.3 Données numériques
Exercice 6.8
Écrire un programme qui convertit en radians un angle fourni au départ en degrés, minutes et
secondes.
Exercice 6.9
Écrire un programme qui convertit en degrés, minutes et secondes un angle fourni au départ en
radians.
Exercice 6.10
Écrire un programme qui convertit en degrés Celsius une température exprimée au départ en degrés
Farenheit, ou l’inverse. La formule de conversion s’écrit :
TF = TC · 9
5
+ 32
Exercice 6.11
Écrire un programme qui calcule les intérêts accumulés chaque année pendant 20 ans, par capitali-
sation d’une somme de 100 francs placée en banque au taux fixe de 2.25%.
Exercice 6.12
Une légende de l’Inde ancienne raconte que le jeu d’échecs a été inventé par un vieux sage, que
son roi voulut remercier en lui affirmant qu’il lui accorderait n’importe quel cadeau en récompense.
Le vieux sage demanda qu’on lui fournisse simplement un peu de riz pour ses vieux jours, et plus
précisément un nombre de grains de riz suffisant pour que l’on puisse en déposer 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 à déposer sur chacune des 64 cases du
jeu. Calculer ce nombre de deux manières :
a) sous la forme d’un nombre entier de grains ;
b) en exprimant le nombre de grains en notation scientifique.
6.4 Données alphanumériques
<...