:: Enseignements :: IMAC :: 2eme année :: 2008-2009 :: Programmation Objet avec Java ::
[LOGO]

Premiers pas en Java


Exercice 1 - Hello Groland

On rappelle qu'il est préféférable en Java que chaque classe soit définie dans un fichier qui lui est propre. Le nom du fichier doit être le nom de la classe qu'il contient, auquel on ajoute le suffixe .java. Les noms des classes doivent être constitués de mots accolés dont la premiére lettre est une majuscule.
Dans un premier temps nous allons écrire des petits programmes permettant de se familiariser avec le compilateur, la machine virtuelle et les méthodes.

  1. écrire le programme suivant :
          public class HelloGroland {
            public static void main(String[] args) {
              System.out.println("Hello Groland");
            }
          }
         
    dans votre éditeur de texte préféré et sauvegarder celui-ci sous le nom HelloGroland.java
  2. Compiler le programme en utilisant le commande javac puis vérifier que le fichier .class correspondant existe bien.
          javac HelloGroland.java
         
  3. Exécuter le programme avec la commande java
          java HelloGroland
         
    On ne met pas ".class" parce que la machine virtuelle le rajoute toute seule.

Exercice 2 - Afficher les arguments de la ligne de commande

écrire une classe PrintArgs qui affiche les arguments de la ligne de commande.
      $ java Voici des arguments
      Voici
      des
      arguments
    
Les arguments de la ligne de commande sont stockés dans le tableau de chaînes de caractères passé en argument à la méthode public static main(String[] args).
  • Dans un premier temps, afficher le premier argument de la ligne de commande (dans notre exemple Voici).
    Que ce passe-t'il si l'on ne passe pas d'argument lors de l'exécution du programme ?
  • Ecrire une boucle affichant le contenu du tableau en sachant qu'en Java les tableaux possèdent un champ (un attribut) length qui renvoie la taille du tableau.
  • Changer votre programme pour utiliser la syntaxe dite 'foreach' for(Type value:array)

Exercice 3 - Calculette simple

écrire un programme prenant un nombre sur l'entrée standard et affichant celui-ci
Pour cela, on utilisera un objet Scanner et particulièrement sa 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
	   }
	 }
    

Pour comprendre le programme, il est utile de regarder la documentation disponible ici, et même de mettre les liens en bookmark (signet, favoris, etc.)

  1. Indiquer dans le programme où sont les variables et quel est leur type associé.
  2. Recopier le programme précédent et le compléter pour qu'il affiche le nombre saisi par l'utilisateur.
  3. Modifier le programme pour déclarer et initialiser les variables en une seule ligne
  4. Expliquer la ligne :
          import java.util.Scanner;
         
  5. Modifier le programme pour qu'il demande deux entier et affiche la somme de ceux-ci.
  6. Afficher en plus de la somme, la différence, le produit, le quotien et le reste.

Exercice 4 - Bien le bonjour

écrire un programme demandant à un utilisateur quel est son nom et affichant "bonjour" suivi du nom rentré précédemment.
Faite en sorte d'afficher le texte "bonjour" et le nom sur une seule et même ligne
  • Soit un utilisant System.out.print()
  • Soit en utilisant le concaténation des chaînes de caractères (le +).

Exercice 5 - Comment créer un livre ?

Le but de cet exercice est de définir des objets Book. Nous allons pour cela créer la classe Book.
  • son titre (une chaîne de caractère) ;
  • son auteur ;
  • son numéro ISBN (une chaîne de caractère) ;
  • son prix en euros (un nombre réel).
Ecrire 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 (les arguments du constructeur sont respectivement le titre, les auteurs, l'ISBN et le prix).
Comment faire pour construire un objet livre (une instance de la classe Book) ?

Exercice 6 - Comment afficher un livre ?

On aimerait pouvoir afficher les caractéristiques d'un livre, par le code Java suivant :
      Book book=...
      System.out.println(book);
    
Java sait faire cela, à condition de mettre dans la classe Book une méthode public String toString() retournant une chaîne de caractères, qu'on construit typiquement à partir des attributs de l'objet.
Ecrire cette méthode, pour obtenir par exemple l'affichage suivant :
    Title : Concepts fondamentaux de l'informatique
    Author : Alfred Aho
    ISBN : 2-7117-8689-7
    Price : 40.0
   

Exercice 7 - Comment comparer deux livres ?

Pour comparer 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, des qu'on utilise des objets, des problèmes apparaissent. Qu'affiche le code suivant :
      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); 
    
Pourquoi?
Pour résoudre ce problème en Java, il suffit d'implanter public boolean equals(Object o) dans la classe Book, qui retourne true si :
  • 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

Ecrire 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 :
  1. 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é)
  2. une méthode int capacity() retournant la capacité de la bibliothèque
  3. 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 ?
  4. une méthode int size() retournant le nombre de livres contenus dans la bibliothèque
  5. une méthode boolean contains(Book book), indiquant si un livre est contenu ou non dans la bibliothèque
  6. 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 ?