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 :
À 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.