:: Enseignements :: Licence :: L3 :: 2020-2021 :: Programmation Objet avec Java ::
[LOGO]

Premiers pas en Java, chaînes de caractères, tableaux, boucles


Exercice 1 - Hello Groland

On rappelle qu'en Java chaque classe publique doit être 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.
Note : la commande java est aussi capable de compiler en mémoire si on lui indique un seul fichier simple, comme par exemple java HelloGrand.java. Dans ce cas, le fichier .class ne sera pas visible sur le disque car la compilation à lieu uniquement en mémoire.

Exercice 2 - Afficher les arguments de la ligne de commande

Écrire une classe PrintArgs qui affiche les arguments de la ligne de commande.
      $ java PrintArgs 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 void main(String[] args).

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. Il est fortement conseillé de mettre ce lien en bookmark (signet, favoris, etc.)

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

Exercice 4 - Record et conversion de String en entier

On souhaite écrire un programme calculant la distance entre deux points, ou plus exactement la distance entre un point et l'origine, i.e. le point de coordonnées (0,0).
Voici un exemple d'exécution :
 	$ java Point 3 4
 	x=3, y=4
  Point[x=3, y=4]
  dist = 5.0
   

  1. Dans un premier temps, créer un record Point (dans un fichier Point.java) avec deux composants x et y, tous les deux de type int.
    Quelle doit être la ligne de commande pour compiler le fichier Point.java, sachant que les records sont une preview feature de Java qui nécessite de spécifier la version de Java (ici 15) ?
  2. Écrire une méthode main qui prend les entiers x et y sur la ligne de commande (3 et 4 dans l'exemple ci-dessus), les convertit en valeurs entières et affiche celles-ci (la ligne x=3, y=4 dans l'exemple).
    Note : La méthode statique parseInt(String s) de la classe java.lang.Integer permet de récupérer la valeur d'un entier stockée dans une chaîne de caractères.
  3. Que veut dire ``statique'' pour une méthode ?
  4. Que se passe-t-il lorsqu'un des arguments n'est pas un nombre ?
  5. Dans le main, ajouter des instructions pour créer un instance du record Point, avec le deux entiers x et y et afficher celui-ci.
  6. On souhaite ajouter au record Point une méthode d'instance (une méthode non statique) nommée distance qui calcule la distance entre deux points sous forme d'un nombre à virgule flottante.
    Quels sont les paramètres et le type de retour de la méthode distance ?
    Sachant que calculer la distance entre deux points est équivalent à utiliser Pythagore sur la distance en x et la distance en y entre les deux points et qu'il existe une méthode statique Math.sqrt qui renvoie la racine carrée d'un nombre, écrire la méthode distance et afficher dans le main la distance entre le point (x, y) et un point à l'origine (0, 0).

Exercice 5 - De C vers Java

Cet exemple a pour but de montrer les différences de performances entre un programme en C et le même en Java.

  1. Compiler (gcc pascal.c) et exécuter le programme a.out en demandant au système le temps d'exécution du programme. (time a.out).
  2. Écrire le programme (Pascal.java) équivalent en Java. Pour une fois, servez-vous du copier/coller. Compiler le programme puis l'exécuter en mesurant le temps (toujours avec time).
Comment peut-on expliquer la différence de vitesse ?