:: Enseignements :: IMAC :: IMAC2 :: IMAC2 2011-2012 :: Programmation Java ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Premiers pas en Java |
Nous réalisons quelques programmes simples et commençons à écrire des classes et à les instantier.
Préliminaires
Le code Java est organisé en classes. Il est conseillé de les nommer en notation dromadaire en commençant par une majuscule (ex: MaClasseJava et non ma_classe_java). Chaque classe est dans un fichier séparé portant le même nom avec pour suffixe .java (ex: MaClasseJava.java).
Pour pouvoir être exécuté, le code source d'une classe doit être transformé en bytecode. On utile pour cela le compilateur javac (ex: javac MaClasseJava.java). Le compilateur produit un fichier bytecode de suffixe .class.
La méthode statique main d'une classe en bytecode peut être exécutée par la machine virtuelle Java par la commande java.
Lorsque l'on utilise une classe inconnue de l'API, il est fortement conseillé de consulter la page de la
Javadoc qui lui est consacrée. Des
guides et
tutoriaux plus ou moins intéressants sont également accessibles avec la documentation Java.
Exercice 1 - Un 1er programme Java : Hello Groland
Écrire avec un éditeur de texte de son choix la classe
HelloGroland dont le code suit dans un fichier de nom
HelloGroland.java :
public class HelloGroland {
public static void main(String[] args) {
System.out.println("Hello Groland");
}
}
Compiler ensuite la classe avec
javac HelloGroland.java : un fichier
HelloGroland.class est produit. Executer ensuite le programme avec la commande
java HelloGroland (pas besoin de spécifier le suffixe
.class).
Exercice 2 - Affichage des arguments de la ligne de commande
La méthode de signature public static void main(String[] args) doit être présente dans toute classe que l'on souhaite exécuter. Elle utilise pour argument un tableau de chaînes de caractères. Comme pour tout tableau en Java, le 1er élément est indicé par 0 (args[0]) et il est possible d'obtenir la taille du tableau par le champ length (args.length).
On souhaite écrire programme
PrintArgs écrivant chacun de ses arguments sur la sortie standard (
System.out). Voici un exemple d'utilisation :
$ java PrintArgs bonjour le monde
bonjour
le
monde
- Afficher dans un premier temps uniquement le 1er argument en faisant attention de gérer le cas où il n'existerait pas
- Utiliser une boucle for avec incrémentation d'un entier pour l'affichage de tous les éléments
- Utiliser une boucle foreach (for (String arg: args)) pour l'affichage des éléments
Exercice 3 - Une calculette simple avec un Scanner
On commence à écrire la calculatrice dont le code suit avec l'aide de la classe
java.util.Scanner. Cette classe permet de découper un flux en éléments élementaires que l'on récupère un par un : ici on récupère des entiers avec la méthode nextInt().
import java.util.Scanner;
public class Calc {
public static void main(String[] args) {
Scanner scanner;
scanner=new Scanner(System.in);
int value;
value=scanner.nextInt();
// completer ici
}
}
>
- Indiquer dans le programme où sont les variables et quel est leur type associé.
- Recopier le programme précédent et le compléter pour qu'il affiche le nombre saisi par l'utilisateur.
- Modifier le programme pour déclarer et initialiser les variables en une seule ligne.
- Expliquer la ligne import java.util.Scanner
- Modifier le programme pour qu'il demande deux entiers et affiche la somme de ceux-ci.
- Afficher en plus de la somme, la différence, le produit, le quotien et le reste.
Exercice 4 - Un bonjour personnalisé
Écrire un programme demandant à l'utilisateur son nom et l'affichant en le préfixant par "Bonjour" (le tout sur une seule ligne).
On propose deux versions :
- En utilisant la méthode System.out.print(String)
- En utilisant l'opérateur + de concaténation de caractères
Exercice 5 - Définition d'un livre
Le but de cet exercice est de définir des objets
Book. Nous allons pour cela créer la classe
Book avec les attributs suivants :
- le titre (une chaîne de caractère);
- l'auteur (une chaîne de caractère);
- le numéro ISBN (une chaîne de caractère);
- et le prix (un nombre réel).
Écrire une classe Book dont les attributs sont tout ce qui caractérise un livre. Dans la classe Book, mettre un constructeur public Book(String title, String author, String isbn, double price) servant à initialiser les attributs des instances de la classe Book. Comment faire pour construire un objet livre (une instance de la classe Book) ?
Exercice 6 - Affichage d'un livre
On aimerait pouvoir afficher les caractéristiques d'un livre, par le code Java suivant :
Book book=...
System.out.println(book);
Tester l'affichage d'un livre sur la sortie standard. A quoi correspondent les informations affichées ?
La méthode de signature
public String toString() permet de retourner une chaîne personnalisée pour représenter un livre. Écrire cette méthode pour afficher le titre, l'auteur, l'ISBN et le prix d'un livre, par exemple sous cette forme :
Title : Concepts fondamentaux de l'informatique
Author : Alfred Aho
ISBN : 2-7117-8689-7
Price : 40.0
Exercice 7 - Égalité de livres
Pour tester l'égalité deux types primitifs, on peut utiliser == :
int a = 2;
int b = 2;
int c = 3;
System.out.println(a==b); //affiche true
System.out.println(a==c); //affiche false
Cependant, dès qu'on utilise des objets, des problèmes apparaissent. Qu'affiche le code suivant et pourquoi ?
Book b1 = new Book("L'écume des jours", "Boris Vian", "AEZD01", 9.99);
Book b2 = new Book("L'écume des jours", "Boris Vian", "AEZD01", 9.99);
Book b3 = b1;
System.out.println(b1==b2);
System.out.println(b1==b3);
Pour résoudre ce problème en Java, il suffit d'implanter une méthode de signature
public boolean equals(Object o) dans la classe Book, qui retourne true ssi :
- o est une instance de Book (utiliser instanceof)
- les champs de o sont égaux (selon vos critères) à ceux de l'instance de Book appelant la méthode
Écrire cette méthode, afin que le code suivant n'affiche que des true :
Book b1 = new Book("L'écume des jours", "Boris Vian", "AEZD01", 9.99);
Book b2 = new Book("L'écume des jours", "Boris Vian", "AEZD01", 9.99);
Book b3 = b1;
System.out.println(b1.equals(b2));
System.out.println(b1.equals(b3));
Exercice 8 - Une bibliothèque
Une bibliothèque contient des livres. Nous représenterons les bibliothèques par des objets instances de la classe
Library qu'il nous faudra écrire. On trouvera en attribut de la classe un tableau de références sur des instances de
Book.
On définira dans la classe
Library :
- un attribut permettant de stocker un nombre maximum de livre ainsi qu'un constructeur, qui prend en paramètre le nombre maximum de livres que peut contenir la bibliothèque (sa capacité)
- une méthode int capacity() retournant la capacité de la bibliothèque
- une méthode void add(Book b) qui ajoute un livre dans la bibliothèque. Que doit-on faire si la bibliothèque est pleine ?
- une méthode int size() retournant le nombre de livres contenus dans la bibliothèque
- une méthode boolean contains(Book book), indiquant si un livre est contenu ou non dans la bibliothèque
- une méthode String toString(), qui affiche l'ensemble des livres contenus dans la bibliothèque.
Regarder dans la javadoc la classe StringBuilder. L'utiliser dans les méthodes toString() de Book et Library.
A quoi sert l'annotation @java.lang.Override ? Comment peut-on l'utiliser sur la méthode toString() ?
© Université de Marne-la-Vallée