Au chapitre précédent, nous avons appris à répéter certaines actions tant qu’une condition est remplie. Maintenant notre objectif est de réaliser que :
Kara positionne une suite de 5 feuilles en ligne.
Evidemment ce serait très facile si on faisait appel à putLeaf()
et move()
cinq fois successivement. Mais ce n’est pas une façon de coder très élégante. Ce qui serait bien, c’est que Kara compte combien de feuilles elle a déjà placées. Pour cela, Kara a besoin d’un “cerveau”, c.à d. une sorte de mémoire. En informatique on utilise la mémoire à l’aide de variables.
Kara sait compter
int i; i = 0; while (i < 5) { putLeaf(); move(); i = i + 1; }
Explanations
- Avec
int i;
Nous réservons un espace mémoire que nous appelonsi
qui pourra stocker une valeur de type entier. On dit que l’on déclare la variable i. En Java, il existe différents types de varia-bles qui peuvent être utilisés (cf. les tableaux, plus bas). - Avec
i = 0;
on affecte à la variablei
la valeur0
. Comme c’est la première affectation pour cette variable, on dit qu’on initialise la variable i. - On peut déclarer et initialiser une variable en une seule ligne :
int i = 0;
- Pour la condition condition
i < 5
, l’opérateur de comparaison<
signifie inférieur à (cf. les tableaux ci-dessous pour les autres opérateurs de comparaison). - Pour l’affectation
i = i + 1
, nous devons d’abord examiner la partie droite. Cela signifie : “prends la valeur courante dei
, ajoute1
à cette valeur et sauvegarde le résultat en remplaçant la valeur dei
.”
Informations complémentaires à propos des Variables
- Il est possible de donner à une variable une valeur intangible, c.à d. d’en faire une constante :
final int NUMBER = 5;
Nous aurions pu alors écrire l’exemple précédent :while (i < NUMBER)
Le nom des constantes est écrit complétement en lettres majuscules. - Le nom des variables qui ne sont pas des constante commence toujours par une lettre minuscule.
Types de données élémentaires ou primitifs en Java
Ces types de données sont appelés “élémentaires” ou “primitifs” car ce sont les types de base en Java. (Plus tard nous apprendrons à créer de types de variables pour des objets).
Entiers et Caractères
Type | Depuis la valeur | Jusqu'à la valeur incluse | Memoire nécessaire |
---|---|---|---|
byte |
-128 | 127 | 8 bit |
short |
-32'768 | 32'767 | 16 bit |
int |
-2'147'483'648 | 2'147'483'647 | 32 bit |
long |
-9'223'372'036'854'775'808 | 9'223'372'036'854'775'807 | 64 bit |
char |
0 | 65'635 | 16 bit |
Nombres à virgule flottante
Type | Depuis la valeur | Jusqu'à la valeur incluse | Memoire nécessaire |
---|---|---|---|
float |
-3.4 \* 1038 | 3.4 \* 1038 | 32 bit |
double |
-1.7 \* 10308 | 1.7 \* 10308 | 64 bit |
Valeurs logiques
Type | Fourchette de valeurs | Memoire nécessaire |
---|---|---|
boolean |
true ou false |
1 bit |
Opérateurs de Comparaison
Les opérateurs suivants peuvent être utilisés pour comparer dans Java. Le résultat est toujours un boolean (soit true
ou false
).
Opérateur | Signifie | Exemple |
---|---|---|
== |
égal (deux signes = accolés) | k == 2 |
!= |
différent de | k < 12 |
> |
strictement supérieur à | k > 67 |
< |
strictement plus petit que | k < 12 |
>= |
supérieur ou égal à | k >= 45 |
<= |
plus petit ou égal à | k <= 23 |
Note: Le signe de comparaison de l'égalité est toujours constitué de deux signes égal ==
. Le signe égal tout seul =
est utilisé pour les affectations !
Opérateurs Arithmétiques
Pour calculer nous utilisons les opérateurs arithmétiques suivants :
Opérateur | Signification | Exemple |
---|---|---|
+ |
Addition | h = value + 34 |
- |
Soustraction | y = 3.4 – t |
* |
Multiplication | z = h * 3.56 |
/ |
Division | d = m / v |
% |
Modulo (donne seulement le **reste** de la Division) | count = w % 2 |
TÂCHE 3.01 : Compter les feuilles
Kara se déplace horizontalement de la gauche vers la droite jusqu'à l’arbre en comptant les feuilles.
Notes:
- À la fin, on peut afficher le résulat sur la console avec la commande suivante :
System.out.println("The result is: " + count);
- Un texte doit toujours être écrit entre guillemets. Le signe + sert à ajouter la valeur de la variable
count
(qui bien sûr aurait pu être nommée différemment). - Portée des variables : les variables locales sont visibles seulement dans le bloc (c.à d. entre les accolades), à l’intérieur desquelles elles ont été déclarées ; et leur durée de vie est limitée à la durée de l’exécution de la méthode qui les porte. Quand elles sont déclarées en-dehors d’une méthode, au niveau de la classe elles sont visibles quel que soit l’endroit de la classe et pour la durée d’utilisation de la classe ; elles sont appelées champs ou attributs ou variables d’instance.
TÂCHE 3.02 : Kara das une boite I
Une surface carrée est délimitée par des arbres. À l’intérieur de cet espace un ensemble de feuilles est disposé que Kara va devoir inverser. Kara démarre du coin supérieur gauche et regarde vers la droite.
Aide:
- Pour cette tâche,Il est pratique d’utiliser des variables booléennes, c.à d.:
- déclaration et initialisation :
boolean goingRight = false;
- permuter de “true” à “false” et vice versa :
goingRight = !goingRight;
- booléen utilisé comme condition :
if (goingRight)
- déclaration et initialisation :
TÂCHE 3.03 : Kara das une boite II
Une surface carrée est délimitée par des arbres. Dans cet espace Kara doit réaliser un damier de feuilles. Kara démarre du coin supérieur gauche et regarde vers la droite.
TÂCHE 3.04 (difficile) : La plus longue ligne d’arbres
Dans notre monde Il ya plusieurs colonnes d’arbres. Kara doit déterminer la longueur (en nombre d’arbres) de la colonne d’arbres la plus grande et afficher le résultat dans la console. Entre chaque colonne d’arbres il y a toujours au moins un espace. Une feuille indique la fin de l’espace de travail.
TÂCHE 3.05 (très difficile) : Pousser un champignon dans un tunnel
Le monde de Kara est constitué de deux boites reliées par un tunnel. On trouve dans la boite de gauche Kara et une feuille. Dans la boite de droite il y a un champignon. Kara doit rejoindre l’autre boite, trouver le cham-pignon et le pousser jusqu'à sa résidence habituelle. Une fois de l’autre côté, le champignon doit être poussé jusqu'à la feuille.
Kara démarre toujours dans le coin supérieur gauche et la feuille est toujours dans le coin inférieur gauche. Le champignon,lui , peut être placé n’importe où dans l’autre boite.
Note:
- Ce problème peut être résolu par paires et en collaboration. Ensuite, certains sous-problèmes peuvent être divisés entre eux :
- Trouver l’entrée du tunnel
- Trouver le champignon
- Déplacer le champignon jusqu'à l’entrée du tunnel
- Déplacer le champignon sur la feuille
Complément sur les Variables
Nous avons fait une rapide introduction aux variables. Voilà quelques compléments sur les différents types :
Types de données primitifs (ou élémentaires)
Types de données élémentaires sont comme des coupes (en mémoire) où la valeur est enregistré directement dans la variable.
Les Types “référence”
La valeur dans k
est une référence à l’objet “Kara”. En utilisant l’opérateur “point” (k.
) ou autrement dit, la notation pointée (k.move()
) k
peut être utilisée comme une télécommande pour l’objet “Kara” !
Etape suivante ?
Sources: Les idées et concepts de Kara ont été developpés par Jürg Nievergelt, Werner Hartmann, Raimond Reichert et al. Quelques exercices Kara s’appuient sur le travail de Horst Gierhardt.
Traduction française: Christian Malen - thank you for your contributions!