Notes de cours. Références

Documents pareils
Chapitre 10. Les interfaces Comparable et Comparator 1

Programmer en JAVA. par Tama

Flux de données Lecture/Ecriture Fichiers

PROGRAMMATION PAR OBJETS

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Projet de programmation (IK3) : TP n 1 Correction

TD3: tableaux avancées, première classe et chaînes

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Utilisation d objets : String et ArrayList

Une introduction à Java

Gestion distribuée (par sockets) de banque en Java

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Langage Java. Classe de première SI

Java Licence Professionnelle CISII,

Package Java.util Classe générique

Programmation Par Objets

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Introduction au langage Java

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Programmation avec des objets : Cours 7. Menu du jour

Cours 14 Les fichiers

Chapitre V. Les classes : Object, Vector, etc.

Développement Logiciel

Entrées / Sorties. Entrées / Sorties. Entrées/Sorties. System.out. Fonctionnement par flots (stream) Karima Boudaoud IUT- R&T. Terrain connu.

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

et se trouve popularisé rapidement pour ses possibilités de développement liés au Web. Les

Dis papa, c est quoi un bus logiciel réparti?

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

RMI le langage Java XII-1 JMF

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

ACTIVITÉ DE PROGRAMMATION

Objets et Programmation. origine des langages orientés-objet

Premiers Pas en Programmation Objet : les Classes et les Objets

as Architecture des Systèmes d Information

Auto-évaluation Programmation en Java

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

TP1 : Initiation à Java et Eclipse

Plan du cours. Historique du langage Nouveautés de Java 7

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

INF 321 : mémento de la syntaxe de Java

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Cours 1: Java et les objets

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Threads. Threads. USTL routier 1

1. Langage de programmation Java

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN :

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Programme Compte bancaire (code)

TP, première séquence d exercices.

Un ordonnanceur stupide

Initiation à la programmation orientée-objet avec le langage Java

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Corrigé des exercices sur les références

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

Java DataBaseConnectivity

Calcul Parallèle. Cours 5 - JAVA RMI

Programmation par les Objets en Java

Travaux Pratiques : Lucène - Gestion d un index plein texte

Langage à objets : JAVA (1)

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Synchro et Threads Java TM

Le prototype de la fonction main()

Programmation Objet Java Correction

Remote Method Invocation Les classes implémentant Serializable

OpenPaaS Le réseau social d'entreprise

Programmation Par Objets et Langage Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Solutions du chapitre 4

Applet pour visualiser les variables «automate» notifiées

TP Programmation Java / JDBC / Oracle

TP3 : Manipulation et implantation de systèmes de fichiers 1

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Java 1.5 : principales nouveautés

Présentation du langage et premières fonctions

TD/TP PAC - Programmation n 3

Anne Tasso. Java. Le livre de. premier langage. 6 e édition. Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, ISBN :

INITIATION AU LANGAGE JAVA

JAVA. Introduction à la programmation objet avec java 1/4. Nadir BOUSSOUKAIA

TD/TP PAC - Programmation n 3

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Programmation Orientée Objet application au langage Java Version Novembre 2007

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Programmation Objet I

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Programmation d application Bases de données avec Java

Support de cours et TD Programmation Orientée Objet

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Transcription:

Notes de cours GEI 442 : STRUCTURES DE DONNÉES ET ALGORITHMES 1 Références Type de référence = tout type JAVA qui n est pas type de base Variable de type de référence (plus simplement : référence) Stocke : - adresse mémoire où se trouve un objet (au lieu de valeur d objet), ou - null Exemple : 100 (3, 7) adresse 100 contient (3, 7) 150 (0, 6) adresse 150 contient (0, 6) 1000 point1 = 150 adresse 1000 contient point1 1500 point2 = 100 adresse 1500 contient point2 2300 point3 = 150 adresse 2300 contient point3 point1 et point3 sont des variables qui référencent l objet qui se trouve à l adresse 150 point2 est une variable qui référence l objet qui trouve à l adresse 100 Dorénavant : Objet type de base la différence est la suivante : - variable de type de base stocke la valeur référencée - variable de référence stocke l adresse de l objet référencé 2 1

Opérations sur références Modification : à l aide de = Exemple : point1 = point2; Le contenu de l adresse 1500 est copiée dans l adresse 1000 Après exécution de l instruction, l adresse 1000 contient 100 Attention : le contenu de l adresse 150 n est pas modifié Comparaison : à l aide de == ou!= Exemple : après modification point1 = point2; on a : (point1 == point2) qui est true Différence entre références et pointeurs : Toute opération autre que celles données ci-dessus est interdite sur des références Exemple : les deux expressions ci-dessous sont invalides : point1 * point2 point1 ++ 3 Opérations sur objets référencés Il y a trois actions de base qui peuvent être effectuées sur un objet référencé : Conversion de type (déjà vu) Exemple : type1 x; type2 y; y = (type) x; Accès à un champ interne ou Appel d une méthode à l aide de l opérateur. Vérifier si un objet est d un type donné : à l aide de l opérateur instanceof 4 2

Opérateur. - Permet de choisir une méthode à appliquer à un objet, en spécifiant : Référence de l objet. Nom de la méthode Exemple : Soit un type Rectangle contenant une méthode surface (sans arguments) Soit rect une variable qui référence un objet de type Rectangle On peut calculer la surface de cet objet, comme suit : double surf; surf = rect.surface(); Si la référence de l objet est égale à null, alors l utilisation de l opérateur. génère un NullPointerException lors de l exécution du programme - Permet d accéder directement à un champ interne d un objet (si accès autorisé) Exemple : Le type Rectangle contient deux champs largeur et longueur Soit rect1 et rect2 deux variables qui référencent deux objets de type Rectangle On peut copier les champs de rect1 dans les champs de rect2, comme suit : rect2.largeur = rect1.largeur; rect2.longueur = rect1.longueur; 5 Déclaration d objets Lorsque variable de type de base déclarée : mémoire allouée pour variable Lorsque objet déclaré : - mémoire allouée pour référence à l objet - nom fourni pour se référer à l objet Attention : pas de mémoire allouée pour stocker l objet Mémoire allouée pour stocker l objet : à l aide de l opérateur new Exemple : Soit un type Point qui contient : - des champs absc et ord - une méthode positionne Point p; /* Alloue mémoire pour stocker référence p initialisée à null */ p = new Point(); /* Alloue mémoire pour stocker objet de type Point Crée objet de type Point dans la mémoire allouée p devient référence de l objet créé */ p.positionne(x,y); /* Champs absc et ord de l objet créé reçoivent x et y */ Remarque : les deux premières instructions peuvent être remplacées par Point p = new Point(); Si on omet l instruction new, alors il y a erreur 6 3

Affectation et garbage collection Si x et y sont 2 variables de type de base, alors après l instruction x = y; la valeur stockée dans y est copiée dans x Si x et y sont 2 variables qui référencent 2 objets, alors après l instruction x = y; - les deux variables vont référencer l objet qui était référencé par y - l objet qui était référencé par x ne sera plus référencé par x Attention : il n y a pas de copie d un objet sur un autre Exemple 1 : Point p = new Point(); Point q = p; // p et q référencent le même objet q.positionne(x,y); // équivalent à p.positionne(x,y) Exemple 2 : Si on veut avoir deux objets identiques Point p = new Point(); Point q = new Point(); p.positionne(x,y); q.positionne(x,y); Garbage collection : lorsqu un objet n est plus référencé, alors il est supprimé 7 Égalité et inégalité Égalité : Si x et y sont 2 variables de type de base, alors l expression x == y est true si les valeurs stockées dans x et y sont égales Si x et y sont 2 variables qui référencent 2 objets, alors l expression x == y est true si x et y référencent le même objet Attention : x == y est false lorsque x et y référencent deux objets identiques Les même règles s appliquent à!= Comparaison d objets : Comme l expression x == y ne permet pas de vérifier si les deux objets référencés par x et y sont identiques, on peut construire une méthode equals pour effectuer cette vérification Exemple : Soient p et q deux objets p.equals(q) retourne la valeur true ou false 8 4

Passage d arguments Le passage est effectué par valeur Si argument de type de base : valeur stockée dans argument est passée Si argument référence un objet : référence à l objet est passée Attention : objet n est pas passé 9 Strings JAVA fournit une classe String Les chaînes de caractères sont manipulées à l aide d objets de type String Deux règles fondamentales : qui différencient les String des autres objets Règle 1 : Un objet String est immuable, càd on ne peut pas le modifier une fois qu on l a initialisé Exemple : String vide = ; /* création de la référence vide et création d un objet référencé par vide */ String bienvenue = bonjour ; /* création de la référence bienvenue et création d un objet bonjour référencé par bienvenue */ String message = bienvenue; /* création de la référence message qui va référencer l objet bonjour */ Après ces déclarations, il y a donc deux objets String 1er est référencé par vide; 2ème référencé par bienvenue et message Les deux objets ne peuvent plus être modifiés. Si on veut que message pointe sur une nouvelle chaîne bonsoir, alors il faut d abord créer un nouvel objet String nouveau = bonsoir ; // création d un objet bonsoir et d une référence nouveau message = nouveau; // ici, il n y a aucune création, ni de référence ni d objet 10 5

Strings (suite) Règle 2 : On peut appliquer les opérateurs + et += à des Strings pour concaténer des chaînes de caractères Exemple : String message1 = bonjour + tout le monde ; String message2 = 25 + + petits cochons ; Remarque : les nombres ne sont pas obligatoirement entre guillemets On peut aussi utiliser += a +=b est équivalent à a = a + b 11 Comparaison des chaînes À part les opérateurs de concaténation, les Strings sont manipulés comme les autres objets. Par exemple, on ne peut pas comparer deux objets à l aide de l opérateur == Exemple : String a = bonjour ; String b = bonjour ; a == b est false car a et b ne référencent pas le même objet Les objets de type String peuvent être comparés à l aide de deux méthodes : equals qui retourne true ou false compareto qui retourne un nombre négatif, nul ou positif, selon une comparaison lexicographique Exemple : String a = bonjour ; String b = bonsoir ; a.equals(b); // retourne false car contenus des chaînes différents a.compareto(b); // retourne un nombre négatif 12 6

Autres méthodes de String length permet d obtenir longueur d une chaîne Exemple : String a = hello ; a.length(); // retourne 5 CharAt permet de récupérer un caractère particulier en spécifiant sa position (1er caractère est à la position 0) Exemple : String a = hello ; a.charat(4); // retourne le caractère o Substring permet de récupérer une sous-chaîne, en spécifiant les positions de début et de fin Exemple : String a = hello ; a.substring(1,3); // retourne la sous-chaîne ell 13 Conversions entre Strings et types de base Méthode tostring permet de convertir un type de base en un String Exemple : tostring(13); /* crée un objet 13 de type String retourne une référence à l objet créé */ Plusieurs classess possèdent une méthode tostring permettant de convertir certains arguments en des String Exemple : Classe Integer String a = Integer.toString(27); Certaines classes possèdent des méthodes inverses de tostring Exemple : int x = Integer.parseInt( 27 ); 14 7

Tableaux (Array) En JAVA, un tableau se comporte comme un objet Si a est un tableau, on peut alors accéder à ses composants en spécifiant un indice positif ou nul : a[0], a[1]... Longueur d un tableau a : a.length Déclaration d un tableau : pas de mémoire allouée pour stocker le tableau Exemple : int [ ] a; /* Mémoire allouée uniquement pour stocker référence à un tableau d entiers */ a = new int [ 50 ]; /* Mémoire allouée pour stocker tableau de 50 entiers. Cette mémoire est référencée par a */ Deux manières de déclarer et allouer mémoire pour tableau - int [ ] a = new int [ 5 ]; // déclaration d un tableau de 5 entiers - int [ ] a = 1, 2, 5, 7, 8; // déclaration et initialisation d un tableau de 5 entiers Les composants d un tableau peuvent être : - de types de base - des objets 15 Exemple d utilisation de tableau (Fig 2.3 dans [1]) import Supporting.Random; public class Lottery // Generate lottery numbers (from 1-49) // Print number of occurrences of each number public static final int DIFF_NUMBERS = 49; public static final int NUMBERS_PER_GAME = 6; public static final int GAMES = 1000; public static void main( String [ ] args ) // Generate the numbers int [ ] numbers = new int [ DIFF_NUMBERS + 1 ]; for( int i = 0; i < numbers.length; i++ ) numbers[ i ] = 0; Random r = new Random( ); for( int i = 0; i < GAMES; i++ ) for( int j = 0; j < NUMBERS_PER_GAME; j++ ) numbers[ r.randomint( 1, DIFF_NUMBERS ) ]++; // Output the summary for( int k = 1; k <= DIFF_NUMBERS; k++ ) System.out.println( k + ": " + numbers[ k ] ); 16 8

Exemple d utilisation de tableau (suite) Constantes : - Nombre de numéros possibles (DIFF_NUMBERS) = 49 - Nombre de numéros tirés par jeu (NUMBERS_PER_GAME) = 6 - Nombre de jeux (GAMES) = 1000 Ligne 15 : Déclare et alloue mémoire pour tableau numbers de 50 entiers Lignes 16, 17 : Initialise à 0 les éléments du tableau Ligne 19 : Déclare et alloue mémoire pour objet r, de type Random Cet objet permet de générer des nombres aléatoirement Lignes 21, 22, 23 : On effectue 1000 jeux (ligne 21) Dans chaque jeu, on tire 6 numéros (ligne 22) À la position i du tableau numbers, il y a le nombre de fois où le numéro i a été tiré 17 Tableaux (Array) Copie de tableaux Comme un tableau est un objet, on ne peut pas copier un tableau à l aide de = Exemple : int [ ] a = new int [ 100 ]; /* création d une référence a et création d un objet tableau de taille 100 référencé par a */ int [ ] b = new int [ 100 ]; /* création d une référence b et création d un objet tableau de taille 100 référencé par b */ a = b; /* a et b référencent le même objet, qui était référencé par b l objet qui était référencé par a n est alors plus référencé, il sera donc supprimé par le garbage collection */ Copie de tableau peut être faite à l aide d une méthode clone Exemple : a.clone(b); /* crée objet b de même dimension et type que a copie a[i] dans b[i], pour i = 0 à a.length-1 */ Passage d arguments tableau - c est la référence au tableau qui est passée - une méthode peut donc modifier un tableau qui lui est passé en argument 18 9

Expansion dynamique d un tableau Si on a un tableau de taille u et qu on veut agrandir sa taille à v (v > u), alors on peut procéder comme suit : int [ ] a = new int [ u ]; // création tableau de u entiers référencé par a int [ ] c = a; // tableau initial référencé par a et c a = new int [ v ]; // a référence un nouveau tableau de taille v > u for (int i=0; i <u; i++) /* copie du tableau initial dans les u premiers a[i] = c[i]; emplacements du nouveau tableau */ c = null; /* le tableau initial n est plus référencé est sera donc supprimé par le garbage collection */ 19 Tableaux multidimensionnels On peut déclarer un tableau de 2, 3, dimensions Exemple : int [ ] [ ] x = new int [ 5 ] [ 10 ]; // création d un tableau de 5*10 entiers */ double [ ] [ ] [ ] x = new double [ 5 ] [ 10 ] [ 100 ]; // création d un tableau de 5*10*100 flottants 20 10

Arguments d une commande Les arguments d une commande correspondent aux arguments args [ 0 ], args [ 1 ], du main Exemple : soit la classe Echo définie ci-dessous (Fig 2.5 dans [1]) public class Echo public static void main( String [ ] args ) for( int i = 0; i < args.length - 1; i++ ) System.out.print( args[ i ] + " " ); if( args.length!= 0 ) System.out.println( args[ args.length - 1 ] ); else System.out.println( "No arguments to echo" ); Si on exécute la commande java Echo bonjour bye le main de la classe Echo est exécuté avec : args.length égal à 2 args [ 0 ] égal à bonjour args [ 1 ] égal à bye 21 Gestion des exceptions : clauses try et catch Exceptions sont des objets utilisés pour prendre en compte des situations exceptionnelles (généralement des erreurs) try : Le code dans lequel une exception peut se produire est mis dans un bloc try try /* code */ catch : Bloc (s) juste après le bloc try Un bloc catch est associé à une exception donnée catch ( Exception e) /* code */ Lorsqu une exception se produit dans le bloc try, alors : - un saut est effectué vers bloc (s) catch - les blocs catch sont vérifiés un après l autre jusqu à ce qu on trouve un bloc correspondant à l exception - le code du bloc catch (si un tel bloc est trouvé) est exécuté 22 11

import java.io.*; Exemple d utilisation de try et catch public class DivideByTwo (Fig 2.6 dans [1]) public static void main( String [ ] args ) BufferedReader in = new BufferedReader( new InputStreamReader( System.in ) ); int x; String oneline; System.out.println( "Enter an integer: " ); try oneline = in.readline( ); x = Integer.parseInt( oneline ); System.out.println( "Half of x is " + ( x / 2 ) ); catch( Exception e ) System.out.println( e ); Dans le bloc try (lignes 14 à 19) : - l exception IOException peut être générée par la méthode readline de la classe BufferedReader (voir [2] page 284) - l exception NumberFormatException peut être générée par la méthode parseint de la classe Integer (voir [2] page 350) Le bloc catch est exécuté pour les deux exceptions car il est associé à l exception parent Exception (voir [2], Fig. 11.2 et 12.2, pages 282 et 330) 23 Types d exceptions L exception parent de toutes les exceptions s appelle Exception Toute autre exception hérite de Exception, sur une ou plusieurs générations Voir [2] : - page 249, pour les exceptions du package java.beans - page 282, pour les exceptions du package java.io - page 330, pour les exceptions du package java.lang D autres exceptions sont présentées dans la version précédente de [2] (java 1.1) : - page 280, pour les exceptions du package java.awt - page 335, pour les exceptions du package java.awt.datatransfer 24 12

Gestion d exceptions : clause finally Un bloc finally peut être ajouté après les blocs catch Après : exécution (d une partie) du bloc try et exécution (éventuelle) d un bloc catch Le bloc finally est exécuté Remarque : le bloc finally est exécuté même si aucun bloc catch n est exécuté Le bloc finally permet, par exemple, d effectuer certains «nettoyages» qui normalement sont effectués dans le bloc try lorsqu aucune exception n a lieu. Ces nettoyages pourraient être mis dans les blocs catch, mais il n est pas garanti qu un bloc catch sera toujours exécuté lorsqu une exception est jetée. Exemples de scénarios : - Si bloc try s exécute sans exception : alors exécution du bloc finally - Si exception générée dans bloc try et n a pas de bloc catch correspondant : alors bloc finally s exécute et l exception est propagée - Si exception générée dans bloc try et attrapée dans bloc catch : alors blocs catch et ensuite finally exécutés 25 Gestion d exceptions : clause throw La clause throw permet de générer une exception Exemple : throw new Exception ( problème! ); On peut générer une exception connue On peut aussi : - définir de nouvelles exceptions qui héritent de Exception - générer ces nouvelles exceptions Un exemple vous sera distribué 26 13

Gestion d exceptions : clause throws Soit une méthode m dans laquelle une exception est jetée, à l aide de throw Il y a les deux cas suivants à considérer : 1) l exception est : - jetée dans un bloc try et - attrapée par un bloc catch 2) l exception : - n est pas générée dans un bloc try (elle ne pourra donc pas être attrapée par un bloc catch) ou - est générée dans un bloc try mais n est pas attrapée par un bloc catch Dans le second cas, la méthode m doit propager explicitement l exception, pour que toute autre méthode n qui appelle la méthode m sache qu elle doit : - soit traiter l exception en : - mettant l appel de m dans un bloc try et - attraper l exception par un bloc catch - soit propager elle aussi l exception pour toute méthode qui appellerait n L exception : - est propagée à l aide de la clause throws - sera en fin de compte traitée, car elle ne peut pas être propagée par le main 27 Exemple d utilisation de throw et throws import java.io.*; public class ThrowDemo public static void processfile( String tofile ) throws IOException // Omitted implementation propagates all // thrown IOException back to the caller public static void main( String args[ ] ) for ( int i = 0; i < args.length; i++ ) try processfile( args[ i ] ); catch( IOException e ) System.err.println( e ); 28 14

Entrées et sorties Il faut faire appel au package java.io à l aide de l instruction import java.io.* Opérations de base On utilise la classe System (voir [2], page 369) qui possède trois champs : - System.in de type InputStream (voir [2], page 299) - System.out - de type PrintStream (voir [2], page 315) System.err System.in représente l entrée standard System.out représente la sortie standard System.err représente la sortie standard d erreurs Écriture : On peut imprimer à l aide de : System.out.println (voir [2], page 428) System.err.println Lecture : Pour lire une ligne, on peut utiliser la méthode readline d un objet BufferedReader (voir [2], page 284) BufferedReader est construit à partir d un objet InputStreamReader (voir [2], page 300) 29 import java.io.*; Entrées et sorties (exemple, Fig. 2.6 dans [1]) public class DivideByTwo public static void main( String [ ] args ) BufferedReader in = new BufferedReader( new InputStreamReader( System.in ) ); int x; String oneline; System.out.println( "Enter an integer: " ); try oneline = in.readline( ); x = Integer.parseInt( oneline ); System.out.println( "Half of x is " + ( x / 2 ) ); catch( Exception e ) System.out.println( e ); Lecture : - lignes 8,9 : création d un objet de type BufferedReader - ligne 16 : lecture d une ligne : in.readline() retourne un String - ligne 17 : convertit le String en un entier Écriture : System.out.println utilisé dans les lignes 13, 18 et 21 30 15

Analyse lexicale d un String Dans l exemple précédent, on a vu comment convertir un String en un entier Cette conversion n est applicable que si le String contient un seul entier Lorsque le String contient plusieurs items, on peut utiliser un objet de type StringTokenizer (voir [2], page 535) qui permet de séparer les items Pour cela, il faut faire appel au package java.util à l aide de l instruction import java.util.*; 31 import java.io.*; import java.util.*; Analyse lexicale d un String (exemple, Fig. 2.10 dans [1]) public class MaxTest public static void main( String args[ ] ) BufferedReader in = new BufferedReader( new InputStreamReader( System.in ) ); String oneline; StringTokenizer str; int x; int y; System.out.println( "Enter 2 ints on one line: " ); try oneline = in.readline( ); str = new StringTokenizer( oneline ); if( str.counttokens( )!= 2 ) throw new NumberFormatException( ); x = Integer.parseInt( str.nexttoken( ) ); y = Integer.parseInt( str.nexttoken( ) ); System.out.println( "Max: " + Math.max( x, y ) ); catch( Exception e ) System.err.println( "Error: need two ints" ); Ligne 19 : Création d un objet str de type StringTokenizer à partir du String lu Ligne 20 : str.countokens() retourne le nombre d items qu il y a dans str Lignes 20, 21 : Exception générée s il n y a pas deux items Lignes 22, 23 : Les deux items convertis en deux entiers x et y 32 16

Entrée sur un fichier séquentiel Cette fois aussi, on utilise un objet de type BufferedReader Mais au lieu de le construire à partir de InputStreamReader, on le construit à partir de FileReader Dans l exemple de la page suivante : - ligne 20 : Création d un objet de type FileReader à partir du nom du fichier filename - ligne 21 : Création d un objet filein de type BufferedReader à partir de l objet thefile - lignes 31, 32 : Le fichier est fermé avant de sortir 33 import java.io.*; Entrée sur un fichier séquentiel public class ListFiles public static void main( String [ ] args ) if( args.length == 0 ) System.out.println( "No files specified" ); for( int i = 0; i < args.length; i++ ) listfile( args[ i ] ); public static void listfile( String filename ) FileReader thefile; BufferedReader filein = null; String oneline; System.out.println( "FILE: " + filename ); try thefile = new FileReader( filename ); filein = new BufferedReader( thefile ); while( ( oneline = filein.readline( ) )!= null ) System.out.println( oneline ); catch( Exception e ) System.out.println( e ); (exemple, Fig. 2.11 dans [1]) // Close the stream try if(filein!= null ) filein.close( ); catch( IOException e ) 34 17