You are on page 1of 8

Segment 4: Java sans objet : caractères et structure de

contrôle (2/5)

6 Concepts de base........................................................................................................................27
6.1 Types de base.....................................................................................................................27
6.1.1 Types Caractère et Chaîne de Caractère ....................................................................27
6.2 Structures de contrôle ........................................................................................................28
6.2.1 Sélection : if...............................................................................................................28
6.2.2 Sélection : if/else........................................................................................................28
6.3 Lecture/Ecriture standard...................................................................................................30
6.3.1 Ecriture ......................................................................................................................30
6.3.2 Lecture .......................................................................................................................30
7 Concepts avancés .......................................................................................................................31
7.1 Structure de contrôle ..........................................................................................................31
7.1.1 Répétition...................................................................................................................31

Marc Tizzano (EMN) 26


6 Concepts de base

6.1 Types de base

6.1.1 Types Caractère et Chaîne de Caractère

Les caractères sont codés sur 16 bits selon la norme Unicode. Les valeurs littérales
peuvent être définies de plusieurs façons :
1) On peut les écrire entre simples quotes comme 'a' ou 'b'.
2) On peut aussi utiliser la valeur du code Unicode et les caractères sont alors notés
'\uXXXX' avec XXXX le code du caractère en hexadécimal.
Par exemple '\u0066' représente le caractère f et '\u03C0' représente le caractère ? (pi)
de la langue grecque.
3) On peut les écrire comme des entiers. Voir l'exemple.
4) On peut aussi utiliser, quand ils existent, les caractères spéciaux comme '\n' pour aller à
la ligne, '\t' pour représenter une tabulation.

Les deux affectations sont équivalentes :

char a = 65 ;
char a = 'A';

Les chaînes de caractères sont écrites entre double quotes comme dans "Bonjour". Entre
ces doubles quotes elles peuvent comprendre des caractères spéciaux, des caractères
Unicode et des simples quotes.

String s = "Bonjour Monsieur";


String s1 = "\u03C0 est la lettre pi.\n Qu'on se le dise !";

La norme utilisée pour le codage est Unicode et non pas ASCII (American Standard Code
for Information Interchange) qui est le standard Americain permettant d'écrire les textes
anglo-saxons. L'ASCII ne normalise pas le code des caractères diacritiques comme les
caractères accentués; cela peut poser des problèmes lors de l'affichage. L'ASCII est un
sous ensemble de l'unicode.
Sur les 65 000 codes possibles (codage sur 16 bits) en Unicode, actuellement seuls 50 000
sont utilisés pour coder les caractères des principales langues dans monde (dont les 21 000
idéogrammes chinois). Des propositions pour ajouter les hiéroglyphes égyptiens ont été
faites.

Marc Tizzano (EMN) 27


6.2 Structures de contrôle

6.2.1 Sélection : if

Pour écrire des calculs qui dépendent d’une condition, Java fournit la structure de contrôle
if. Elle est de la forme

if (Condition)
Instruction //Exécutée si Condition est vraie

Par exemple :

if (i > 3)
System.out.println(“i est plus grand que 3”);

Pour exécuter plusieurs instructions dans le corps du if, il faut les entourer d’accolades.
Par exemple :

If (i > 3) {
System.out.println(“i est plus grand que 3”);
System.out.println(“Et j’en suis sûr”);
}

6.2.2 Sélection : if/else

Pour exécuter aussi une instruction lorsque la condition est fausse, on utilise :

if (Condition)
Instruction1 //Exécutée si la condition est vraie
else
Instruction2 //Exécutée si la condition est fausse

Par exemple :

if (i > 3)
System.out.println(“i est plus grand que 3”);
else
System.out.println(“i n’est pas plus grand que 3”);

Marc Tizzano (EMN) 28


Bug potentiel
La condition est évaluée une seule fois, à l'entrée de l'instruction. Par exemple
int i = 5;
if (i > 3) {
System.out.println(“i est plus grand que 3”);
i=2;
} else {
System.out.println(“i n’est pas plus grand que 3”);
}
Imprime bien "i est plus grand que 3"

Le problème du else pendant

Le programme suivant pose un petit problème :

if (a < 5)
if (b < 8)
System.out.println(“a < 5 et b < 8”);
else
System.out.println(“a >= 5”);

Qu’affiche ce programme si a est égal à 3 et b est égal à 5 ? Evidemment il affiche :

a < 5 et b < 8

Et si a est égal à 3 et b est égal à 9 ? Réfléchissez … Vous pensez qu'il n'affiche rien.
Erreur, il affiche :

a >= 5

En effet le compilateur a interprété le texte comme suit :

if (a < 5) {
if (b < 8)
System.out.println(“a < 5 et b < 8”);
else
System.out.println(“a >= 5”);
}

Marc Tizzano (EMN) 29


Pour qu’il se comporte comme le laisse supposer l’indentation, il aurait fallu écrire :

if (a < 5) {
if (b < 8)
System.out.println(“a < 5 et b < 8”);
} else {
System.out.println(“a >= 5”);
}

Bug potentiel
Attention au else pendant. N’hésitez pas à parenthéser vos instructions if/else.

6.3 Lecture/Ecriture standard

6.3.1 Ecriture

L’affichage à l’écran se fait facilement en Java, il suffit d’utiliser :


• System.out.print(“A Imprimer") pour imprimer la chaîne de caractère sans
passer à la ligne suivante.
• System.out.println(“A Imprimer") pour imprimer la chaîne de caractère
en passant à la ligne suivante.

6.3.2 Lecture

Malheureusement la lecture des entrées effectuées au clavier ne se fait pas simplement en


Java. Aussi, avons-nous créé un ensemble de méthodes facilitant cette tache. Pour pouvoir
les utiliser, il faut simplement recopier le fichier Clavier.class, dans le répertoire qui
contient le programme. Vous pouvez alors utiliser les méthodes suivantes :
• lireInt(), lireLong() qui lisent des int ou des long.
lireChaine() qui lit une chaîne de caractères.

System.out.print("Quel est ton age ? ");


int age = Clavier.lireInt();
System.out.print("Quel est ton nom ? ");
String nom = Clavier.lireString();
System.out.println("Bonjour " + nom+" ton age est "+age);

Marc Tizzano (EMN) 30


7 Concepts avancés

7.1 Structure de contrôle

7.1.1 Répétition

La structure de répétition la plus générale est la boucle while.

while (expr)
instructions;

Elle permet d’exécuter instructions tant que expr est vrai.

Bug potentiel
Il faut prendre soin de vérifier que l'on sort bien de la boucle while, par exemple en
modifiant la condition dans la boucle while.

Considérons un programme qui indique le premier carré (d’un entier) supérieur à 1000

int carre = 1;
int valeur = 1;
while (carre < 1000) {
valeur++;
carre = valeur * valeur;
}
System.out.println(carre);

INFO04EXE01
Ecrivez un programme qui lise un entier N, et affiche la première puissance de 2 dont la
valeur est supérieure à N.

N'oubliez pas de recopier Clavier.class dans le répertoire qui contient votre programme.

Marc Tizzano (EMN) 31


INFO04EXE02
Conjecture de Syracuse (ou le 3x +1)1

Ecrivez un programme qui lise un entier N, puis s’il est pair le divise par 2, s’il est impair
le multiplie par 3 et ajoute 1. Cette opération est alors recommencée avec le résultat
obtenu. Le programme s’arrête quand la valeur obtenue est égale à 1.
Par exemple, partons de 3. Trois étant impair on obtient 10 (3*3+1), puis à partir de 10 on
obtient 5, puis 16, puis 8, puis 4, puis 2 , puis 1. Tous les nombres jusqu’à 3,2 1016 ont été
essayés, ils aboutissent tous à 1. Mais cette conjecture n’a pas pu être démontrée.

N'oubliez pas de recopier Clavier.class dans le répertoire qui contient votre programme

1
Le lecteur intrigué par cette conjecture, lira avec profit, l’excellent livre de Jean-Paul Delahaye « Jeux
mathématiques et mathématiques des jeux »

Marc Tizzano (EMN) 32


Marc Tizzano (EMN) 33