Premiers programmes
en Java

L'environnement de programmation

Pour ces premiers TPs, nous allons utiliser un simple éditeur de texte comme emacs, gedit ou tout autre éditeur capable de faire de la coloration syntaxique. Il s'agit ainsi de se familiariser avec les commandes java et javac, et de bien comprendre la chaîne des outils utilisés en Java.

Compiler et exécuter : javac et java

Pour faire un programme en Java, il faut taper son code via l'éditeur de texte sélectionné et de l'enregistrer dans un fichier, par exemple MonProg.java.

Pour compiler le programme il faut taper la commande :

> javac nom_fich.java

Cette commande génère un fichier compilé de nom : MonProg.class. Et pour lancer l'exécution de ce programme il faut taper :

> java MonProg

Le code minimal

En Java, tout programme contient au moins une classe publique contenant la méthode public static void main(String[] args). C'est cette méthode qui est exécutée après le lancement de la JVM. Comme vous le verrez plus tard, en règle générale, chaque classe est stockée dans un fichier différent. Le nom du fichier doit être identique au nom de la classe qu'il contient avec en plus l'extension '.java', en respectant les minuscules et les majuscules. Voici le code minimal pour un programme Java :

/**
 * Minimal : illustration du code minimal requis pour un programme Java
 */

/**
 @author Bob
 *
 */
public class Minimal {

  /**
   @param args paramètres du programme
   */
  public static void main(String[] args) {
    //votre code ...
  }

}

Remarques :

Hello World!

L'exemple suivant est le code complet d'un programme java qui se contente d'afficher la chaîne de caractère : "Hello world!"

/** 
 * The HelloWorldApp class implements an application that
 * simply prints "Hello World!" to standard output.
 */
public class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!")// Display the string.
    }
}




Exercice 1:

Écrivez, compilez et exécuter le programme précédent.

Notez au passage une méthode très importante en Java :

System.out.println("votre texte");

Cette méthode vous permet d'afficher une ligne de texte. Vous pouvez l'utiliser aussi pour afficher la valeur d'une variable :

int n=5;
System.out.println(n);



Ou encore une chaîne structurée avec un texte et la valeur d'une variable :

int n=5;
System.out.println("La valeur de n est : "+n);

Testez ces différentes utilisations en modifiant la classe HelloWorldApp.





Exercice 2:

Coder la fonction factorielle dans un programme, appelé Factorielle. Ce programme affichera la factorielle de n, n étant une variable de type int dont la valeur est fixée dans le code au moment de sa déclaration ( int n = 5; ). exemple, si n est fixée 5 :

> java Factorielle
factorielle pour n = 5 : 120

Les paramètres d'un programme

Un programme peut recevoir des paramètres que l'on spécifie dans la ligne de commande au moment du lancement de l'exécution du programme. Exemple :

> java Prog p1 p2 p3

Cette ligne de commande lance donc l'exécution du programme Prog avec les paramètres : p1 p2 et p3. Les paramètres sont des chaînes de caractères, séparés les uns des autres par des espaces.

Récupération des paramètres transmis :
Dans le programme les paramètres sont placés dans l'argument args de la méthode public static void main(String[] args), comme vous l'avez remarqué args est un tableau de String, c'est a dire un tableau de chaînes de caractères. Dans l'exemple précédent on aura alors : la chaîne p1 dans args[0] , la chaîne p2 dans args[1] et la chaîne p3 dans args[2].
Rappel : le nombre d'éléments que contient un tableau "tableau" est donné par la valeur tableau.length. Ainsi toujours dans notre exemple : args.length vaut 3.





Exercice 3:

Ecrire un programme appelé AfficheArgs qui affiche tous les paramètres qui lui sont transmis en ligne de commande (un par ligne).





Exercice 4:

Écrivez un programme Factorielle2 qui calcule la factorielle d'une valeur n donnée en paramètre au moment du lancement du programme.

Exemple :

> java Factorielle2 3
factorielle pour n = 3 : 6

> java Factorielle2 6
factorielle pour n = 6 : 720





Exercice 5:

Ecrire un programme, appelé Calcul, qui retourne le résultat d'une opération donnée en paramètre, il doit gérer les opérateurs : + - * et / et supporter des opérandes à virgule (on se limitera au cas où seulement 2 opérandes et un opérateur sont donnés en paramètres. Exemple :

> java Calcul 5 + 6.5
11.5

Attention : l'exécution dans une console Unix de la commande :
> java Calcul 3 * 4
provoque une erreur car le caractère * est interprété par le shell et est remplacé par l'ensemble des noms de fichier contenu dans le répertoire courant. Convainquez-vous en exécutant la commande :

> java AfficheArgs *

Il faut donc taper à la place :

> java Calcul 3 "*" 4

Ceci n'a aucune conséquence pour le programme, il recevra toujours les paramètres 3, * et 4.





Exercice 6:

Écrire un programme appelé DernierIndexDans qui, étant donné une string et un caratère, donne la dernière position du caractère dans la string ou -1 si il n'y en a pas. La première position étant numérotée 0.

Exemple :

> java DernierIndexDans testeur e
Le dernier e dans testeur se trouve à la position 4

>> java dernierIndexDans testeur a
Le dernier a dans testeur se trouve à la position -1





Exercice 7:

Écrire un programme appelé TermineAvec, étant donné deux strings, vérifie si la première se termine par la deuxième.

Exemple :

> java TermineAvec testeur eur
testeur se termine bien en eur

>> java DernierIndexDans testeur eurr
testeur ne se termine pas en eurr

>> java DernierIndexDans testeur euR
testeur ne se termine pas en euR





Exercice 8:

Écrire un programme appelé TermineAvecIgnorerLaCasse qui fait la même chose mais sans tenir compte de la casse des caractères

Exemple :

> java termineAvecIgnorerLaCasse testeur eur
testeur se termine bien en eur

>> java TermineAvecIgnorerLaCasse testeur eurr
testeur ne se termine pas en eurr

>> java TermineAvecIgnorerLaCasse testeur euR
testeur se termine bien en euR





Exercice 9:

Ecrire un programme nommé HexadecimalToInteger : un convertisseur hexadécimal -> décimal qui affiche la valeur décimale d'un caractère (un seul) hexadécimal fournit en paramètre. Par ailleurs, le programme doit vérifier que le caractère passé en argument est bien un nombre hexadécimal et le signaler à l'utilisateur dans le cas contraire.

Exemples:

> java HexaToInt A
10


> java HexaToInt G
Erreur: G n'est pas un caractere hexadecimal.





Exercice 10:

Améliorer le programme précédent pour qu'il puisse convertir une valeur hexadécimale de plusieurs caractères.

Exemple:

> java HexaToInt B5
181





Exercice 11:

Écrire un programme nommé SystemProperty qui affiche les propriétés de l'OS suivantes : le nom de l'utilisateur, tel qu'il est enregistré dans l'OS, le répertoire de travail courant et le numéro de version de la machine virtuelle utilisée pour lancer le programme





Exercice 12:

Écrire un programme qui crée un tableau d'entier de taille 100 initialisé avec les vingt premiers indexes à 0, les 60 suivants à 2 et les 20 derniers à 8. Ensuite le programme doit afficher le tableau avec le formatage précis suivant : [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8]





Exercice 13:

Écrire un programme qui copie son fichier source dans un sous répertoire "backup"





Exercice 14:

Écrire un programme qui prend en paramètre une url (e.g. http://www.lirmm.fr) et un nom de fichier. L'objectif est d'enregistrer le fichier correspondant à l'url dans un fichier du nom donné comme deuxième paramètre