Premiers pas en Java

Le langage de programmation utilisé pour les TP d’algorithmique et programmation est le langage Java. Le but de ce premier TP est d’écrire, de compiler et d’exécuter des premiers programmes simples.

S’organiser / éditer

Avant tout, il est important de bien organiser vos travaux. Pour cela, commencer par créer un répertoire pour les TP dans votre répertoire personnel et le nommer, par exemple, TPs_algo. Dans ce répertoire TPs_algo, vous créerez ensuite un nouveau dossier pour chaque nouveau TP.

Selon que vous avez déjà des habitudes ou non et en fonction de la disponibilité des éditeurs sur les machines du département, vous choisirez un éditeur pour taper vos programmes durant cette première partie de semestre. Les éditeurs recommandés sont emacs et atom. Pour la seconde partie du semestre vous pourrez progressivement passer à l’environnement de développement intégré idea .

Saisir le code ci-dessous dans l’éditeur sélectionné, et l’enregistrer dans dans un fichier nommé Hello.java, situé dans un dossier ad-hoc.

class Hello {
  public static void main(String[] args) {
     System.out.println("Hello World !!!");
  }
}

Avertissement

  • L’extension .java est importante pour indiquer qu’il s’agit bien d’un programme Java.

  • La majuscule au début du nom de fichier est importante, elle répond à des recommandations d’écriture : un nom de classe débute par une majuscule et le fichier associé porte le même nom (casse comprise).

Note

  • Tout programme Java doit comporter une méthode main() dont l”entête est celle de l’exemple.

  • La méthode main() est le point d’entrée du programme, c’est à dire que c’est elle qui est exécutée à l’invocation de la commande java Hello.

  • Toute méthode, y compris donc main(), est déclarée à l’intérieur d’une classe ; dans l’exemple, il s’agit de la classe Hello.

Compiler / exécuter

Avant de pouvoir exécuter le programme, il faut le transformer en fichier exécutable. Cette opération, appelée compilation est réalisée par un compilateur. Le compilateur que vous allez utiliser s’appelle javac et s’invoque, depuis un terminal, en se plaçant dans le dossier du code source Hello.java.

javac Hello.java

La compilation ci-dessus à généré un fichier Hello.class. Ce fichier est une version binaire (on dit aussi un bytecode java) destinée à être exécutée par une machine virtuelle java. Toujours dans le même dossier; l’exécution est déclenchée par la commande

java Hello

Afficher des données

Dans l’exemple Hello2.java ci-dessous, on a :

  • Déclaré des variables avec les types de base int, double et char.

  • Initialisé ces variables dès de leur déclaration.

  • Affiché leur valeur.

À faire

  • Modifier le code de l’exemple Hello.java pour obtenir le code Hello2.java ci-dessous.

  • Compiler puis exécuter le programme Hello2.

  • Dé-commenter les deux dernières lignes de l’exemple, et observer la différence à l’exécution.

Code d’exemple Hello2.java

class Hello2 {
       public static void main(String[] args) {
       int entier  = 2014;
       double reel = 3.1416;
       char lettre = 'S';

       System.out.println(entier);

       System.out.println("entier : " + entier);
       System.out.println("reel ..: " + reel);
       System.out.println("lettre : " + lettre);

       //System.out.println(entier + reel);
       //System.out.println("" + entier + reel);
       }
}

Lire des données depuis le clavier

La lecture de données au clavier peut se faire à l’aide d’un objet spécial de la classe Scanner.

À faire

  • Compiler et étudier l’exemple suivant (Hello3.java) pour en comprendre le fonctionnement.

Code d’exemple Hello3.java

import java.util.* ;
class Hello3 {
   static final Scanner input = new Scanner(System.in);

   public static void main(String[] args) {
     int entier;
     double reel;
     String chaine;
     // input.useLocale(Locale.ROOT);

     System.out.println("Entrer un entier : ");
     entier = input.nextInt();
     System.out.println("Donner un mot : ");
     chaine = input.next();
     System.out.println("Valeurs saisies : " + entier + " " + chaine);
         }
}

Note

  • System.in représente le flux d’entrée standard pour le programme, c’est à dire par défaut le clavier.

  • Le modificateur final signale la déclaration d’une constante.

  • L’instruction en commentaire input.useLocale(Locale.ROOT) localise les entrées en anglais pour l’objet Scanner. Cela permet d’utiliser le point décimal au lieu de la virgule du français.

Lire des données depuis un fichier texte

Entrer de nombreuses valeurs au clavier peut s’avérer fastidieux. Nous utiliserons alors parfois la possibilité de remplacer ces entrées manuelles par la lecture d’un fichier texte contenant un jeu de données de test.

Dans l’exemple précédent, si l’on créé un fichier nommé data.txt contenant

12345
Dupont

Il suffit d’employer la technique de redirection d’entrée standard permise par le shell linux pour que la lecture des données se fasse depuis ce fichier data.txt.

java Hello3 < data.txt

Le résultat est le suivant :

Entrer un entier :
Donner un mot :
Valeurs saisies : 12345 Dupont

Effectuer des opérations

Il s’agit d’écrire un programme qui convertit en degrés Celsius une température donnée en degrés Fahrenheit. La formule de conversion est la suivante :

\[celsius = 5\times \frac{(fahr-32)}{9}\]

À faire

  • Écrire un programme Java qui demande à l’utilisateur d’entrer une température en Fahrenheit, puis qui la convertit en Celsius.

  • Compiler puis exécuter le programme en fournissant une valeur de 106.

  • Modifier la formule de calcul en la formule équivalente suivante

    \[celsius = \frac{5}{9} \times (fahr-32)\]
  • Exécuter de nouveau le programme avec la valeur 106 et analyser le résultat obtenu.