Post on 20-Aug-2018
Cours 5 16/01/06 18:12
1
I. Test / structure alternatives / conditionnelles / Choix • intro
o Séquence : Séquence d’instruction et toutes les
instructions sont exécuté une et une seule fois. o Test : Les instructions seront exécutée si et uniquement si
une condition est remplie. o Utilisation d’un pseudo langage pour décrire les conditions
et les boucles marche pour tous les langages.
• 1) Condition simple o SI condition
ALORS instructions FINSI
exemple : SI 0≤A≤9 ALORS AFFICHER « c’est un chiffre »
FINSI
• 2)Condition o if (condition)
instruction 1; (seule l’instruction 1 dépend du if) instruction 2 ;
o if (condition) { instruction 1 ; (l’instruction 1 et 2 dépend du if) instruction 2 ; }
• 3) Condition + alternative o SI condition
ALORS instrutctions1 ; SINON instruction2 ; FINSI
• 4°) indentation o if (condition)
instructions1 ; else instruction2 ;
• 5°) Imbrication o SI car=’/’
ALORS SI B≠Ø ALORS R A/B
2
FINSI SINON R A*B
FINSI o If (car == ‘/’)
{if (B !=Ø) R = A/B ;} else R = A*B ;
• 6°) Tests non indépendants o if (A<Ø) s.o.p(« négatif ») ;
elseif (A == Ø) s.o.p(« Nul ») ; elseif (A>Ø) s.o.p(« positif ») ;
elseif n’est pas nécessaire a la dernière ligne. Else suffit.
o if (Math.sqrt(A)>2 && A>Ø)
Erreur : si A est nul, le programme plante car il y a erreur sur la
racine carré de 1.
il est donc référable de mettre : (A>Ø && Math.sqrt(A))
o if (A<B && A<C) s.o.p(A); if (B<A && B<C) s.o.p(B); if (c<=A && C<=B) s.o.p(C) ;
expression lourds !
o if (A<=B && A<=C) s.o.p(A) ; else if (B<=A && B<=C) s.o.p(B) ; else s.o.p(C) ;
un peu moins de test pour la même expression
o if (A<=B)
if (A<=C) s.o.p(A) ; else s.o.p(C) ; else if (b<=C) s.o.p(B) ; else s.o.p(C) ;
structure hiérarchisée pour l’expression
o if (a<=B) M=A ; else M=B ; if (C<=M) s.o.p(C); else s.o.p.(M);
un peu mieux : on découvre la solution petit à petit
II. Boucle répétitive • 1)TANT QUE
3
o TANT QUE condition vraie FAIRE
instruction FIN TANTQUE
nombre de tour inconnu.
Le test de la condition est situé au début de la boucle. : La
boucle peu ne pas tourner si la condition initiale n’est pa
exécutée.
En sortie de boucle la condition est forcément fausse : a
prendre en compte en prog inutile de retester que les
conditions testées sont fausses en sortie de boucle
Il faut initialiser les variables qui sont dans la condition avant la
boucle.
Il est important que la boucle puisse changer la condition : si la
boucle ne modifie par la condition, la boucle tourne alors à
l’infini erreur !
• 2)REPETER o REPETER
instructions JUSQUA condition devienne vraie
nb de tour inconnue
Test à la fin 1 à N
les instructions sont exécutés au moins une fois
il faut que les instructions puissent changer la condition
risque de boucle infini
• 3) REPETER n FOIS o REPETER n FOIs
instructions FINREPETER
nombre de tour connu : n
o variable 1
TANT QUE variable≤n FAIRE instructions variable variable + 1
FIN TANTQUE
équivalent à la boucle répété n fois.
• 4) POUR variable DE x À y
4
o POUR variable DE début A fin FAIRE
instruction FIN POUR
nombre de fois connu : fin – début + 1
test au début : elle peut ne pas être exécutée si la condition est
fausse dès le début.
o variable 18 ;
POUR variable DECROISSANT DE début A fin PAR pas FAIRE instructions FIN POUR
DECROISSANT est une option qui permet de compter a l’envers
PAR permet de compter avec un certain pas. par exemple de 2
en 2.
III. Choix de boucle • Nombre de tour connu à l’avance ?
o OUI POUR ou REPETER n FOIS
Si l’on a besoin de la valeur du compteur : POUR
sinon REPETER n FOIS.
o NON TANT QUE ou REPETER JUSQUA
si l’on dois exécuter les instruction au moins une fois : REPETER
JUSQUA
sinon TANT QUE
IV. Boucle JAVA • 1) while
o while (condition) instruction;
équivalent de TANTQUE
• 2) do while o do
instruction while( !(condition));
équivalent de REPETER
• 3) for o for (initialisation ; test de continuation ; incrémentation)
instruction;
équivalent à POUR … DE … A …
5
parenthèses obligatoires
utilisation des points virgules !! (même si c’est pas logique car
d’habitude le « ; » termine les instructions)
initialisation est une instruction (affectation).
ex : variable = début
o for (variable = début ; variable<=fin ; variable ++)
instructions ;
• 4) for / particulière o for (variable = Ø; variable<n; variable ++)
instructions;
équivalent a REPETER n FOIS
V. Imbrication • exemple 1
o for (i=Ø ; i <1Ø ; i++) {for (j=Ø ; j<5 ; j++) if (i == j) s.o.print(‘*’) ; else s.o.print(‘.’) ; s.o.println() ; }
TD 5.1 16/01/06 18:12
6
IN101 : • I° les objectif
o Savoir utiliser les structures alternatives simple et multiples et
savoir manipuler les expressions booléennes
• II) Notions a mettre en œuvre o Cours 5 : SI ALORS FINSI, if o Cours 5 : SI ALORS SINON FINSI, if else o TD 5.1 : SELON QUE VAUT AURE FINSELONQUE, switch case
break default
• III) Références dans le petit memento de java o cf : 11.3.1.1 o cf : 11.3.1.2
• IV) Expressions booléenne o 1°) (i1 == 0)
o 2°) (i2 > 0) o 3°) (i3 >= 0) o 4°) (‘0’>c || c>’9’) o 5°) (i4%2 == 1 && i5 == 0)
a%2 est soit égale à 0 soit égale à 1
• V) Traduire en java o public void isChar(char c)
{ if (c >= ‘a’ && c <= ‘z’) { s.o.p("minuscule) ; } else if (c >= ‘A’ && c <= ‘Z’) { s.o.p("MAJUSCULE") ; } else if (c >= ‘0’ && c <= ‘9’) { s.o.p("chiffre") ; } else { s.o.p("divers ») ;
7
} }
• VI) Exercies o public void getMax(int a, int b, int c)
{ private int m ; m = a ; if (b > m) { m = b ; } if (c > m) { m = c ; } return m; }
o public void calc(float a, char op, float b) { float res ; string err ; switch (op) { case ‘*’ : res = a*b; break ; case ‘+’ : res = a+b ; break ; case '-' : res = a-b ; break ; case ‘/’ : if (b==0) err = "Division par zero ! " ; else res = a/b ; break ;
8
default : err = "Operation inconnue !" ; } if(err) { s.o.p(err) ; } else { s.o.p( a + " " + op + " " + b + " = " + res) ; } }
• VII Problèmes o METHODE comparaison vecteurs PARAM a1 (float), b1 (float), c1
(float), a2 (float), b2 (float), c2 (float) RETOUR char
public void printDate(char jour, int quantieme, int mois, int annee)
TD 5.2 16/01/06 18:12
9
TD 5.2 • 1) les objectifs
o Savoir choisir et programmer des structures répétitives et savoir
manipuler les expressions booléennes.
• 2) Notions abordées dans le cours 5 o TANT QUE , while () {} o REPETER JUSQU'A, do {} while (!()) o POUR, for (;;) {} o REPETER … FOIS, for (;;) {} o critères de choix de boucle
• 4) o pour i=1
X(1) = X(0) * X0 = X0^2
o pour i=2 X(2) = X(1) * X0 = X0^3
o pour i=n X(n) = X0^(n+1) ≡ X0^(Math.floor(X0)))
• 5) traduire en Java o public void lireVoyelle()
{ char carac ; int NbEssais=0 ; boolean estVoyelle= false; do { carac = JOptionPane.showInputDialog(« Entrez une voyelle minuscule »).charAt(0) ; NbEssais++ ; estVoyelle = (carac == ‘a’ || carac == ‘e’ || carac == ‘i’ || carac == ‘o’ || carac == ‘u’ || carac == ‘y’) ; if(!estVoyelle) s.o.p(« erreur ») ; } while(( !estVoyelle) && (NbEssais)) if(!voyelle) s.o.p(« trop d’erreur ») ; else s.o.p( carac + « est bien une voyelle
10
minuscule ») ; }
• 6) o o public int getFactorielle(int n)
{ if (n<0) { return 0 ; } else { int i; int f = 1 ; for (i = 2 ; (i ≤ n) ; i++) { f = f * i ; } return f ; } }
o public void affNb(int num)
{ int i ; string res ; string work ; for (i=0 ; i≤ num.length ; i++) { switch(num.at(i)) { case 0 : work = « zero » ; break ; case 1 : work = « un » ; break ; […] case 9 :
QCM 2 16/01/06 18:12
12
QCM • Question 1
o d°)cp ../ESSAI.TXT NOUVEAU.TXT
rm ESSAI.TXT FAUX
• Question 3 o E) obj = prim ;
prim = obj ;
• Question 4 o
• Question 13 a)
Cours 6 16/01/06 18:12
13
I Tableaux • Intro
o Objectif est de regrouper un grand nombre de valeur et donnée
dans un tableau.
• 1°) Taille Fixe o Les tableaux ont une taille fixe. o Dans C et C++ : la taille des tableaux est fixe lors de la
compilation o Dans Java, taille fixe peut être précisée à l’exécution o Ensemble d’élément de même type accessible par leur rand, font
la taille est fixé à l’exécution.
• 2°)Nouveau type o T[ ] constitue un objet
• 3°) Déclaration o int[] tab ;
nom du tableau : tab
type de donnée : int
o int[] tab2 ;
nom du tableau tab2
Attention, cela ne créé pas l’objet.
• 4°) Allocation mémoire = création de l’objet o T[] tab = new T[taille];
int[] t = new int[10]
taille peut être soit un entier soit un attribu entier
types autorisés pour la taille : int short byte
• 5°) Attribut public o tab.length
.lenght : taille du tableau : défini le nombre de case du tableau ≠ du
nombre d’élément utils du tableau.
par exemple si seul trois cases sont utilisés sur 10, lenght renverra 10
et non 3.
tab.lenght attribut
tab.lenght() méthode qui existe dans la classe string
• 6°) accès o tab[indice]
indice est du même type
/!\ : première case : N°0
14
dernière case : N° (tab.lenght – 1)
Attention dans certain langages, en cas de dépassement
(ex :attribution d’une case du tableau hors de al taille du tableau)
Dans java, les indices des tableaux sont contrôlés. Si vous utilisé une
case hors tableaux, il renvoie une érreur avec la position éxacte.
o tab[0] représente la case désigné. Dans le cas d’un tableau
d’entier, tab[0] correspond à un entier.
tab[i] = tab[i-1] + tab[i+1] ;
• 7°) initialisation o int[] t={-2, 4, -3, 6, 0} ;
• 8°) Méthodes d’object o clone()
clone le tableau en deux tableau. Les valeurs sont recopiés
≠ ( t2 = t)
int[] t2= t.clone.() ;
o equals()
compare deux tableaux d’entier
attention si les case du tbaleau contient des lien vers des objetx
o tostring()
pas très intéressante pour les tableaux
• 9°) Méthodes de java.util.Arrays o Arrays.equal(t1, t2)
méthode statique : deux paramètres
même sur un tableau d’objet, elle va appeler equals sur chaque objet.
renvoie true ou false
o Arrays.tostring(tab)
permet d’afficher un tableau sous la forme [val1, val2,… ]
o Arrays.Fill(tab,val)
rempli un tableau avec une valeur
o binarySearch(tab,val)
permet de chercher une valeur val dans un tableau tab
retourn : le prof ne sais pas ( soit true false soit les indices où c’est
égaux
o sort(tab)
permet de trier le tableau
de base classe par un tableau croissant
15
• 10°) Caractères o Il est possible de faire des tableaux de caractères
String ≠ char[]
string s et tableau t s.length() et t.lenght
o pour construire une string a partir d’un tableau de caractère : String s = new String(t) ;
t est un tableau de caractères
o Au contraire : s.toCharArray() converti une chaine de
caractère s en tableau
ex : char[] t2 = s.toCharArray() ;
• 11°) Multidimensionnel o exemple : une image sur un écran est un tableau bidimensionnel
o ex : pour une séquence d’image couleur de 1 seconde il faut 5 dimensions
o Pour faire simple utilisons le tableau à deux dimensions. o pour cela on fait un tableau de tableaux o Notation : int[][] bidim = new int[3][2]
il s’agit d’un tableau de 3 fois deux cases.
tableau[ligne][colone]
o int[][] bidim = {{11,12},{21,22},{31,32}} ; o taille de la deuxième dimension : bidim.length[0]
renvoi 2
o Arrays.deepToString()
va chercher « en profondeur toutes les valeurs de dans toutes les
dimensions »
ex : "[[11,12],[21,22],[31,32]] »
o Arrays.deepEquals()
équivalent a Equals mais travail sur toutes les dimensions du tableau
II Collections • 1°) Framework
o Interfaces : ce sont des listes de méthodes abstraites qui définissent le contrat que devra remplir toute collection
Interface de plus haut niveau s’appelle Collection
16
Mais il existe des sous collection : List Set Queue
o Implémentations : implementation partielle
AbstractList AbstractSet
o Concrets : implementation totale o Algorithmes
• 2°) ne contient que des objets ! • 3°) Déclaration
o ArrayList<E> a = new ArrayList<E>();
E = Object ou Frame ou String ou Double
• 4°) Méthodes des collections o boolean add(E)
prend comme paramètre un élément de type E
retourne un bouléen -> retourne toujours vrai
o boolean contains(O)
O correspond à n’import quel objet
o boolean isEmpty()
vrai si la collection est vide
o boolean remove(O)
17
retire un objet de la collection
vide sans toucher la capacité
o int capacity()
nombre de case de la collection
o int size()
nombre d’objets effectivement dans la collection
différent que capacité
o ArrayList est extensible à l’infini. il est possible de faire des add à l’infini
o Arrays.asList(tab)
renvoie un tableau en une collection
o E[] toTray()
• 5°) Méthode d’ArrayList o E get(int)
c.get(Ø) t[Ø]
o void Set(int,E) o int indexOf(E)
retourn -1 si il ne le retrouve pas
sinon retourn l’index de l’objet
o E remoce(int)
supprime un élément à une certaine position
o void TrimToSize()
réduit la capacité à la size
TD 6 16/01/06 18:12
18
V Tableaux : traduire en Java • code
o public class Tableaux
{ public static void run() { int[] t1 ; int[] t2 ; t1 = saisirTableau(« premier ») ; afficheTableau(t1) ; t2 = saisirTableau(« second ») ; afficheTableau(t2) ; if tabEgal(t1, t2) s.o.p(« identiques ») ; else s.o.p(« différents ») ; } public static int[] saisirTableau(string qt) { int n ; int i ; S.O.P(« Taille du " + qt + " tableau ?") ; n = Integer.parseInt( JOptionPan.showInputDialog("entier numero " + i) ) ; int[] t = new t[n] ; int r ; for(i = 1 ; i <=n ;i++) { r = Integer.parseInt( JOptionPan.showInputDialog(« Element " + i + " : ") ) ; t[i - 1] = r ; } return t ; } public static void afficherTableau(int t) { String s ;
19
int i ; if (t != "") { s = t[0] ; } for (i=1 ; (t.length – 1)<=i ;i++) { s = s + ", " + t[i] ; } return s ; } public static tabEgal(int t1, int t2) { boolean r = true ; int i ; if(Arrays.equal(t1,t2) r = false ; else { i = 0 ; while((i < t1.length) && (r)) { if(t1[i] != t2[i]) r = false i++ ; } } return r ; } }
ECRIRE EN JAVA • MOYENNE
o version 1 public static int moyenne(double[] tab, int taille) { double moyenne ;
20
int i for(i = 1, i <= taille,i++) { moyenne = moyenne + tab[i] } return (moyenne / taille) ; }
o version 2 public static int moyenne(ArrayList tab) { double moyenne ; int i int taille = ArrayList.size(tab) ; for(i = 1, i <= taille,i++) { moyenne = moyenne + tab.get(i) ; } return (moyenne / taille) ; }
• Minimum o public double minimum(double[] tab, int taille)
{ sort(tab) ; return tab[0] ; }
• Matrice public class Matrice
{ private final int n = 20 ; public static void test() { double[][] mat = new mat[5][n] ; affMat(initMat(mat)) ; } public static double[][] iniMat(double[][] mat) {
21
for(int i=0 ;i<=n;i++) { mat[0][i] = java.lang.Math.pow(i,1/3);; mat[1][i] = java.lang.Math.pow(i,1/2); mat[2][i] = i; mat[3][i] = i * i; mat[4][i] = i * i * i; } return mat ; } public static void affMat(double[][] mat) { int i ; for(i=1 ;i<=n;i++) { /* system.out.println … */ } } }
QCM 6 16/01/06 18:12
22
QCM • question 1
o E)
• Question 3 o switch(expression)
{ case …. ; }
dans expression, on ne peut mettre que caractère ou que entier.
Dans case, on ne peut mettre que des variable nommée (ie des
constante). EX : 3, "A"
• Question 4 o Il est possible d’imbriquer des structures if o if(-)
if(--) instruction 1 ; else instruction 2 ; else instruction 3
• Question 6 o item B et E sont faux
• Question 8 o double[] tab = new double[expression] ;
on peut utiliser un expression de type int
• Question 12 o Une collection ne peut contenir que des objets !!!!! o Autoboxing et unboxing possibilité de convertir
automatiquement un type primitif en type objet et inversement.
Notion fondamentale
Par exemple dans la version 4 de palindrome, lors du clonage d’une
collection c1 vers c3 : avec des type objets et après clonage la
modification d’une valeur d’un objet modifiera son clone. Alors que
avec des type primitifs ça modifiera que la valeur clonée sans modifier
l’original.
o ArrayList<Integer> a ;
a = new ArrayList<Integer>() ;
• Question 13
Exceptions 16/01/06 18:12
24
I EXCEPTIONS • 1°) Exemple
o public double get(int i)
{ return tab[i-1] ; }
il faut gérer le cas où le i est hors tableau : on peut mettre une
instruction if qui teste la tailler du tableau.
Plus simple que ça et plus pratique, on peut utiliser les exceptions qui
permette de gérer les erreurs : ce sont es exceptions.
• 2°) Def o exception : événement exceptionnel qui déroute le
fonctionnement du programme. o En java il s’agit d’un objet qui est une sous classe de la classe
Exception o Les exceptions peuvent être de type différent. ex : exception
arithmétique, exception d’entrée sortie, etc o On peut aussi créer ses propres exceptions adaptée à ses besoins
• 3°) Système de Gestion o Les principe est que l’on lance une exception lorsqu’un
événement survient. Une fois lancée, cette dernière prévoit de rattraper cette exception en la traitant.
o EXEMPLE :
25
• 4°) Avantages o Séparer
o propager o différencier/regrouper
• 5°) Hiérarchie o Différentes hiérarchisations des erreurs
o
• 6°) Traitement des exceptions lancées par le SDK o int n=Integer.parseInt(S) ;
Si S est "12" pas de problèmes
Si S est "douze", une exception est lancée
o NumberFormatException
Dans java doc, on peut consulter les exceptions qui peuvent être
lancée. Consulter la rubrique Throws de chaque méthodes
o Traitement des exceptions se fait avec l’utilisation d’un bloc try o try
{ Ξ Instructions à essayer
} catch(Exception e) { Ξ traitement de e
}
e est le nom que vous donner à l’objet du type exception
26
On peut mettre autant de catch que l’on souhaite pour traiter
différemment divers exceptions.
Attention : l’ordre des blocs catch compte : dans l’organigramme, il
faut d’abord traiter les élément les plus particulier, càd le plus profond
dans l’arbre (ici dans l’exemple c’est RunTimeException) au moins
particulière (ici c’est error puis throwable)
o Traitement partiel : permet de relancer l’exception afin de
remonter jusqu’à la méthode qui a appelé la méthode qui a généré l’exception throw e ;
o obligation (catch or specified) : on peut rajouter "throws" à la fin d’une signature
Sauf pour les RunTimeException
o Traitement des exceptions : il existe des cas où un morceau de traitement qui sont exécuté Et en traitement normal Et lors de l’exception. On peut spécifier des morceaux qui sont exécuté dans tous les cas :
o finally { "instruction finales toujours exécutées" ; }
• 7°) Lancer des exceptions ( existant dans le JDK) o Exemple au début d’une méthode vous avez un paramètre p. o if(p mauvais paramètre)
On peut lancer soit même une exception « manuellement ».
Or une exception est un objet il faut donc créer un objet de la classe
exception
o if(p mauvais paramètre)
throw new NumberFormatException("paramètre trop grand : " + p)
Il faut préciser « throws NumberFormatException » dans la signature
o < !> try{ if(!cond) throw new ClasseException() ; instruction1 ;} catch(ClasseException e){instruction 2 ;} <rigoureusement équivalent à > if(cond){instruction 1 ;} else {insctrution 2 ;}
27
o Règle importante Si la gestion de l’exception se fait dans la
même méthode, il faut la traiter avec des if/else. Les exceptions doivent être utilisé pour gérer une erreur avec une autre méthode.
• 8°) Créer ses propres exceptions o créer une classe Exception ou sous classe
Il faut d’abord vérifier dans java doc si il n’existe pas une déjà
existante pour le problème
Puis il faut voire si il n’y en a pas une qui s’en rapproche pour faire un
extends
Il ne faut pas hériter de RuntimeException
o redéfinir getMessage() return "explication" ; o Ajouter des attributs dans cette classe afin de mémoriser des
choses lors de l’exception un constructeur.
• 9°) Les assertions o Programmation par contrat
mise en oeuve par la notion d’assetion
o préconditions
vérifiée au début de la classe
o post-condition
vérifiée à la fin
o invariant
à tous moment
o Principe : assert condition : message ;
est équivalent à
if( !cond) throw new AssertionError(message) ;
o L’intérêt est de programmer de façon sûr. Par contre le code vas être plus long et le programme vas être plus lent
o Ainsi c’est utile lors du développement, car on peut activer ou non les vérification.
se définie lors de la compilation.
II Applications • intro
o une application est un programme java indépendant de bluJ.
peut être graphique ou non
28
o java Classe arg1 arg2 … argn (dans un terminal)
c’est une commande qui lance une machine virtuelle java et ça lance la
Classe passée en argument ça implique que Classe.class existe dans
le répertoire courant. il va automatiquement lancer la methode
main()
Dans une classe, pour qu’une méthode soit appelable de l’extérieur, il
faut que celle-ci soit public, static, void. Ainsi en java main doit être
static public et void et doit avoir en paramètre de quoi les argument 1
et 2 dans l’exemple : à savoir un tableau pour les arguments.
o public static void main(String[] arguments) {etc…
On peut ainsi se passer bluJ pour lancer un programme java.
La classe main étant statique il faut soit appeler des classes statiques
soit créer des objets.
Pour sortir du programme : return ; (car main est du type void
retourne rien du tout)
o javac [-ea]Classe.java (dans un terminal)
on peut passer comme argument –ea pour activer les assertions
o javadoc [-d:repertoire|-author|-version] *.java
on met en généralement *.java car on veut généralement générer une
doc sur tous les fichier java d’un projet par exemple.
On peut rajouter l’option –private pour faire une documentation pour le
développeur qui va afficher aussi les méthodes et attributs privés
On peut ajouter l’option –linksource pour lié la doc générée avec les
fichiers sources.
III APPLETTES • Intro
o Ensemble de classes java qui s’éxecutent automatiquement lors de la consultation d’une classe HTML indépendant de l’OS client. utilisable sur linux, Windows, mac os, etc.
o Il existe des restrictions de sécurité. Ainsi on ne peut pas accéder au disque dur depuis une applet.
o Les applets necessitent un fichier html pour s’exécuter. Il existe une commande qui s’appelle appletviewer qui va lancer un fichier html dans lequel il va lancer un applet.