Programmer en Java

Page 1 sur 73Lecteur de document UniversityLib

Programmer en Java

Java Programming and Object-Oriented Programming · notes

Voir tous les documents en programmation

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 parametres a 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

<...