HMIN215 - Eléments de solutions pour les exercices sur les itérateurs

Documents pareils
Package Java.util Classe générique

Java Licence Professionnelle CISII,

Programme Compte bancaire (code)

Corrigé des exercices sur les références

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Programmer en JAVA. par Tama

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

Chapitre 10. Les interfaces Comparable et Comparator 1

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

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

Corrigés des premiers exercices sur les classes

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

Premiers Pas en Programmation Objet : les Classes et les Objets

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

Synchro et Threads Java TM

OpenPaaS Le réseau social d'entreprise

Java 1.5 : principales nouveautés

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

as Architecture des Systèmes d Information

Utilisation d objets : String et ArrayList

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

Exercices sur les interfaces

Programmation avec des objets : Cours 7. Menu du jour

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

PROGRAMMATION PAR OBJETS

TD/TP PAC - Programmation n 3

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

Auto-évaluation Programmation en Java

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Flux de données Lecture/Ecriture Fichiers

Projet de programmation (IK3) : TP n 1 Correction

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

Programmation Orientée Objet

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Programmation Objet Java Correction

Un ordonnanceur stupide

4. Groupement d objets

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

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

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

Programmation par les Objets en Java

ACTIVITÉ DE PROGRAMMATION

Le prototype de la fonction main()

Tp 1 correction. Structures de données (IF2)

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

Cours 1: Java et les objets

INF 321 : mémento de la syntaxe de Java

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

Notes de cours Practical BigData

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Introduction au langage Java

Threads. Threads. USTL routier 1

Programmation Par Objets

Développement Logiciel

Tutoriel d installation de Hibernate avec Eclipse

Serveur d'archivage 2007 Installation et utilisation de la BD exist

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

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

Java Licence Professionnelle CISII,

Programmation Objet I

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

Une introduction à Java

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

RMI le langage Java XII-1 JMF

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

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)

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

LOG4430 : Architecture logicielle et conception avancée

Java DataBaseConnectivity

TP, première séquence d exercices.

Remote Method Invocation Les classes implémentant Serializable

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

Langage Java. Classe de première SI

Solutions du chapitre 4

Introduction. Les méthodes. Les méthodes. Identité et égalité. Identité et égalité. La copie d'objets. Identité et égalité.

2. Comprendre les définitions de classes

Généralités sur le Langage Java et éléments syntaxiques.

Héritage presque multiple en Java (1/2)

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

TD/TP PAC - Programmation n 3

OUTIL DE TRAVAIL COLLABORATIF

Calcul Parallèle. Cours 5 - JAVA RMI


Utiliser Java sans BlueJ

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

Paginer les données côté serveur, mettre en cache côté client

Introduction au langage C

TP Programmation Java / JDBC / Oracle

1. Langage de programmation Java

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Applet pour visualiser les variables «automate» notifiées

TP1 : Initiation à Java et Eclipse

Création d une application JEE

Généricité. en Java. (polymorphisme paramétrique) Philippe GENOUD UJF Janvier

Classe Interne, Anonyme & Enumération

Transcription:

HMIN215 - Eléments de solutions pour les exercices sur les itérateurs 1 Feu Tricolore Un feu tricolore se compose de trois couleurs (on peut utiliser la classe Color en Java, avec des valeurs comme Color.red). Itérer sur le feu tricolore consiste à parcourir (sans fin a priori) les trois couleurs. Ecrire une classe pour représenter les feux tricolores, un itérateur de feu tricolore et un programme montrant une utilisation. On propose tout d abord une première solution avec une classe interne. public class FeuTricoloreCI implements Iterable<Color> private Color[] tab = Color.green, Color.orange, Color.red; private class IterateurFeuTricoloreCI implements Iterator<Color> private int curseur = 0; public boolean hasnext() return true; public Color next() Color couleurcourante = FeuTricoloreCI.this.tab[curseur]; // ou juste Color couleurcourante = tab[curseur]; curseur ++; if (curseur==3) curseur = 0; return couleurcourante; public Iterator<Color> iterator() return new IterateurFeuTricoloreCI(); public static void main(string [] argv) FeuTricoloreCI f = new FeuTricoloreCI(); Iterator<Color> it = f.iterator(); for (int i=0; i<12; i++) La deuxième solution utilise une classe interne anonyme. public class FeuTricolore implements Iterable<Color> private Color[] tab = Color.green, Color.orange, Color.red; public Iterator<Color> iterator() return new Iterator<Color>() private int curseur = 0;

public boolean hasnext() return true; public Color next() Color couleurcourante = FeuTricolore.this.tab[curseur]; // ou juste Color couleurcourante = tab[curseur]; curseur ++; if (curseur==3) curseur = 0; return couleurcourante; ; public static void main(string [] argv) FeuTricolore f = new FeuTricolore(); Iterator<Color> it = f.iterator(); for (int i=0; i<6; i++) 2 Itérer sur un objet complexe Une feuille de salaire comprend les éléments suivants qui peuvent être représentés par des attributs dans une classe FeuilleSalaire tels que : employeur salarié convention collective nombre d heures payés prélèvements fiscaux : CRDS, CSG, cotisations salariales net à payer... Définir une classe FeuilleSalaire itérable. Un itérateur donnera successivement les valeurs des différents attributs. Cela peut servir par exemple pour écrire une méthode d affichage ou pour récupérer toutes les informations qui sont des nombres (définir de telles opérations en utilisant l itérateur). public class FeuilleSalaire implements Iterable<Object> private String employeur, salarie; private Integer nombreheures; private Double montantnet; public FeuilleSalaire(String employeur, String salarie, Integer nombreheures, Double montantnet) super(); this.employeur = employeur; this.salarie = salarie; this.nombreheures = nombreheures; this.montantnet = montantnet; public String getemployeur() return employeur;

public void setemployeur(string employeur) this.employeur = employeur; public String getsalarie() return salarie; public void setsalarie(string salarie) this.salarie = salarie; public Integer getnombreheures() return nombreheures; public void setnombreheures(integer nombreheures) this.nombreheures = nombreheures; public Double getmontantnet() return montantnet; public void setmontantnet(double montantnet) this.montantnet = montantnet; public Iterator<Object> iterator() return new IterateurFeuilleSalaire(this); public static void main(string[] arg) FeuilleSalaire f = new FeuilleSalaire("IBM","Jean",200,2000.3); for (Object o : f) System.out.println(o); for (Object o : f) if (o instanceof Number) System.out.println(((Number)o).intValue()); Définir un itérateur de feuille de salaire qui retourne successivement chacun des champs de la feuille de salaire. public class IterateurFeuilleSalaire implements Iterator<Object>

private FeuilleSalaire f; private int curseur=0; IterateurFeuilleSalaire(FeuilleSalaire f)this.f=f; public boolean hasnext() return curseur < 4; // ou utiliser f.getclass().getfields().length; public Object next() switch (curseur) case 0: curseur = 1; return f.getemployeur(); case 1: curseur = 2; return f.getsalarie(); case 2: curseur = 3; return f.getnombreheures(); case 3: curseur = 4; return f.getmontantnet(); default: throw new RuntimeException("pas de champ pour cet indice"); Le programme mettant en œuvre une feuille de salaire et un itérateur a été placé dans la classe FeuilleSalaire. 3 Itérateur sur une suite réelle Nous souhaitons représenter des suites réelles, et plus précisément nous nous limitons ici aux suites constantes à partir d un certain rang. On rappelle qu une suite réelle est une application u d une partie de N dans R. On considère ici les suites définies sur N. Une suite est constante à partir d un certain rang s il existe un entier naturel n et un réel a tels que pour tout entier naturel n n, u(n ) = a. Question 1 Ecrivez une classe SuiteConstanteRang pour représenter les suites constantes à partir d un certain rang. On pourra stocker les n 1 premiers éléments dans une ArrayList. Question 2 On rappelle l interface Iterator<E> : public interface Iterator<E> boolean hasnext(); //Returns true if the iteration has more elements. E next() // Returns the next element in the iteration. void remove(); // Removes from the underlying collection the last element // returned by this iterator (optional operation). Ecrivez une classe IterateurSuiteConstanteRang qui permette d itérer sur une suite constante à partir d un certain rang. Un élément a toujours un successeur. L opération remove ne pourra enlever que des éléments entre les rangs 1 et n 1.

Question 3 Rendez la classe SuiteConstanteRang itérable. On rappelle l interface Iterable<E> : public interface Iterable<T> Iterator<T> iterator(); //Returns an iterator over a set of elements of type T. L ensemble de la solution est donné ci-dessous : public class SuiteConstanteRang implements Iterable<Double> private ArrayList<Double> valeurs = new ArrayList<Double>(); private double constante; public SuiteConstanteRang(ArrayList<Double> valeurs, double constante) super(); this.valeurs = valeurs; this.constante = constante; public ArrayList<Double> getvaleurs() return valeurs; public void setvaleurs(arraylist<double> valeurs) this.valeurs = valeurs; public int getrang() return this.valeurs.size(); public double getconstante() return constante; public void setconstante(double constante) this.constante = constante; public Iterator<Double> iterator() return new IterateurSuiteConstante(this); public Double valeur(int n) if (n < this.getrang()) double v=this.getvaleurs().get(n); return v; else return this.getconstante(); public static void main(string[] argv) ArrayList<Double> a = new ArrayList<Double>(); a.add(3.0); a.add(4.0); a.add(5.0); a.add(6.0); a.add(7.0);

SuiteConstanteRang suite = new SuiteConstanteRang(a,8); Iterator<Double> it = suite.iterator(); System.out.println("------avec itérateur"); System.out.println("------avec for"); System.out.println(suite.valeur(i)); it = suite.iterator(); System.out.println("------avec suppression"); for (int i=0; i<4; i++) if (i==2) it.remove(); System.out.println("------après suppression"); it = suite.iterator(); public class IterateurSuiteConstante implements Iterator<Double> private SuiteConstanteRang s; private int indicecourant; public IterateurSuiteConstante(SuiteConstanteRang s) this.s=s; public boolean hasnext() return true; public Double next() Double r = s.valeur(indicecourant); indicecourant+=1; return r; public void remove() if (indicecourant-1 < s.getrang()) s.getvaleurs().remove(indicecourant-1); else System.out.println("retrait sans effet car superieur au rang");

Question 4 Que va écrire le programme suivant et comment l interprétez-vous? Est-ce que cela mérite une modification de ce qui a été précédemment écrit? public static void main(string[] argv) ArrayList<Double> a = new ArrayList<Double>(); a.add(3.0); a.add(4.0); a.add(5.0); a.add(6.0); a.add(7.0); SuiteConstanteRang suite = new SuiteConstanteRang(a,8); Iterator<Double> it = suite.iterator(); for (double e : suite) System.out.println(e); La suite a été définie de manière infinie puisque hasnext retourne toujours vrai, il faut donc veiller à limiter l itération quand on la réalise.