• Aucun résultat trouvé

mots“Bonjour”“Bonsoir”“Au revoir”

N/A
N/A
Protected

Academic year: 2022

Partager "mots“Bonjour”“Bonsoir”“Au revoir”"

Copied!
1
0
0

Texte intégral

(1)

Tableau d’objets

Les éléments d’un tableau peuvent être des références à des objets.

Exemple 1:

La déclaration suivante réserve de l’espace pour stocker 25 références à des objets String

.

String[] mots = new String[25];

Elle ne crée PAS les objets String eux mêmes. Chaque objet de type String devra être créer séparément.

mots[0] = new String (“Bonjour”);

mots[1] = new String (“Bonsoir”);

mots[2] = new String (“Au revoir”);

. . .

Chaque

élément de mots est une variable de référence vers un objet de type String qui se retrouvent à des emplacements quelconques en mémoire.

Exemple 2 :

Nous désirons créer un tableau contenant des objets Rectangle.

La définition de la classe Rectangle étant la suivante : .

. .

mots

“Bonjour”

“Bonsoir”

“Au revoir”

(2)

public class Rectangle {

private int longueur;

private int largeur ;

public Rectangle(int longueur, int largeur) { this.longueur = longueur;

this.largeur = largeur;

} .

. .

// méthode pour calculer et retourner le périmètre public int perimetre(){

return 2 * (longueur + largeur);

}

// methode pour affocher un rectangle public void afficher () {

System.out.println( "<longueur = " +

longueur + ", largeur = " + largeur + ", perimetre = "

+ perimetre() + ">");

}

public int getLongueur() { return longueur;

}

public int getLargeur() { return largeur;

} }

Construisons maintenant un tableau de Rectangle et affichons-en le contenu.

public class TabRectangle {

public static void main (String[] args) {

/* déclaration de la variable de référence et création de l'objet tableau de rectangle */

Rectangle[] tabRect = new Rectangle[5];

/* Création des objets dont les références se trouveront dans le tableau */

for(int i = 0; i < tabRect.length; i++)

tabRect[i] = new Rectangle(i+1, 10-(2*i));

/* Parcours du tableau pour afficher certaines informations

(3)

for( i = 0;i < tabRect.length; i++) tabRect[i].afficher();

} }

Exercice 1

Écrivez une méthode static pour afficher les Rectangles du tableau qui sont carrés.

Solution :

public static estCarre(Rectangle[] tabRect) {

System.out.println(“Les carrees\n”);

for( i = 0;i < tabRect.length; i++)

if(tabRect[i].getLongueur == tabRect[i].getLargeur) tabRect[i].afficher();

}

Exercice 2

Écrivez une méthode static pour afficher les Rectangles dont le périmètre est supérieur à 18.

public static superieur(Rectangle[] tabRect, int nombre) {

System.out.println(“Les rectangles dont le périmètre est supérieur à ” + nombre + “\n”);

for( i = 0;i < tabRect.length; i++) if(tabRect[i].perimetre() > nombre) tabRect[i].afficher() );

}

Appel : superieur(tabRect, 18) ;

Vecteurs

Java fournit la classe Vector dans sont package java.util

Un objet de la classe Vector est similaire à un tableau puisqu’il permet de stocker plusieurs valeurs.

Par contre, un Vector ne peut contenir que des références sur des objets.

Contrairement au tableaux, un Vector ne requiert pas la manipulation d’indices pour gérer ses éléments. Cette gestion se fait à travers les méthodes de cette classe.

(4)

A) Pourquoi ?

1. C'est une classe dont on peut profiter de ses méthodes au lieu de tout programmer comme le cas des tableaux d'objets;

2. Son nombre d'éléments varie dépendant de la méthode appliquée (ajouter, insérer,

supprimer, . . .);

3. Méthodes assez générales pour des objets de natures différentes (ajouter un nouvel

élément, chercher un élément, modifier le contenu d'un élément, supprimer, …).

B) Comment ?

public class Vector

extends AbstractList

// sous-classe de …. (notion d’héritage)

implements List, Cloneable, Serializable

// notion d’interface

1. À importer :

import java.util.*;

2. Déclaration et (1 manière de) construction Vector cercle = new Vector();

Vector employe = new Vector();

Vector pays = new Vector();

On n'a pas déclaré la taille du vecteur

ni le type de chaque élément.

Avec ces déclarations :

cercle est un vecteur vide (pas

d'éléments), sa taille vaut zéro :

cercle.size() vaut 0

(5)

pays est un vecteur vide (pas

d'éléments) sa taille vaut zéro : pays.size() vaut 0

etc. . .

3. Ajout d'un nouvel élément : Cercle c1 = new Cercle(1.5),

c2 = new Cercle(4.2);

c1

c2

cercle.addElement(c1);

cercle.addElement(c2);

Après ces 2 ajouts : cercle.size() vaut 2

4.Accès à un élément :

Cercle c = (Cercle) cercle.elementAt(1);

La méthode elementAt(k) retourne un objet (de la classe Object) :

On doit convertir en classe Cercle avec la conversion : (Cercle)

Si un a un vecteur "pays" de 125 nations, l'affectation :

Nation p = (Nation) pays.elementAt(99);

permet d'affecter à p le 100

ième

pays du 1.5

4.2

(6)

vecteur. Notez que l'accès via indice n'est pas permis avec un vecteur : pays[99] n'est pas valide.

5. Modifier un élément (utile pour le tri) Supposons qu'on dispose d'un vecteur de 12 cercles.

Cercle nouvCercle = new Cercle(7.7);

cercle.setElementAt(nouvCercle, 6);

nouvCercle

La deuxième ligne mémorise le nouveau cercle dans le vecteur à l'indice 6.

6.Insertion un élément :

Supposons qu'on dispose d'un vecteur de 12 cercles . Cercle nouvCercle = new Cercle(10.4);

cercle.insertElementAt(nouvCercle, 10);

nouvCercle

Le nouveau cercle prend sa place à l'indice 10 et pousse les deux autres vers le bas du vecteur. La taille devient 13.

7.Suppression :

public final boolean removeElement (Object obj);

Si l'objet est un élément du vecteur : . supprimer la première occurrence

7.7

10.4

(7)

. déplacer certains éléments vers le haut

. décrémente la taille du vecteur . retourne true

Si non :

. retourne false

public final void removeElementAt(int indice);

Supprimer l'élément à l'indice spécifié s'il existe et faire des ajustements en conséquence.

public final void removeAllElements();

Retirer tous les élements et mettre sa taille à 0

8. Recherche :

public final int indexOf (Object obj);

retourne l'indice de la première occurrence de l'objet trouvé (-1 si non trouvé)

public final int lastIndexOf (Object obj);

retourne l'indice de la dernière occurrence de l'objet trouvé (-1 si non trouvé)

public final boolean contains (Object obj);

retourne true si l'objet donné est un élément de ce vecteur (false sinon).

9. Conversion en chaîne de caractères : public String toString()

retourne une chaîne représentant le vecteur.

10. Tester si le vecteur est vide :

public boolean isEmpty()

(8)

On se limite à ces méthodes pour IFT 1170.

Les informations plus complètes se trouvent au lien :

http://java.sun.com/products/jdk/1.2/docs/api/java/util/Vector.html

Exemple 1:

import java.util.Vector;

public class Beatles {

public static void main (String[] args) {

Vector band = new Vector();

band.addElement ("Paul");

band.addElement ("Pete");

band.addElement ("John");

band.addElement ("George");

System.out.println (band);

band.removeElement ("Pete");

System.out.println (band);

System.out.println ("A la position 1: " + band.elementAt(1));

band.insertElementAt ("Ringo", 2);

System.out.println (band);

System.out.println ("Taille du groupe: " + band.size());

} }

Efficacité des vecteurs :

Une différence importante entre les tableaux et les vecteurs est que ces derniers gèrent implicitement leurs taille, celle-ci peut changer

automatiquement leur de l’exécution du programme s’il manque de place pour un nouvel élément.

Par contre, l’implémentation de la classe Vector utilise (implicitement) un tableau. Lorsque nous insérons un nouvel objet ailleurs qu’à la fin, tous les qui le suivront seront d’abord décalés, un à un, d’une position dans le vecteur, ce qui ralenti l’exécution du programme.

Lors que le traitement à faire demande beaucoup d’insertions et de suppressions d’éléments, un vecteur risque de s’avérer moins efficace que, par exemple une liste chaînée.

Exemple 2 :

import java.util.*; /* pour utiliser la classe Vector */

(9)

/** classe Vector, informations de base * Fichier Vecteur0.java et Cercle.java * Explications : en classe

* De LVN pour IFT 1170 */

public class Vecteur0 {

static void afficher (Vector c, String message) { System.out.println(message);

if (c.size() == 0)

System.out.println("Le vecteur est vide");

else {

System.out.println("Le vecteur contient " + c.size() + " element(s)");

for (int i = 0 ; i < c.size(); i++)

( (Cercle) c.elementAt(i)).afficher(" a l'indice " + i);

System.out.println();

} }

public static void main (String[] args) {

Vector c = new Vector();

afficher(c, "Apres l'instruction : Vector c = new Vector(); ");

Cercle c1 = new Cercle(10.2), c2 = new Cercle(1.7);

c.addElement(c1);

c.addElement(c2);

afficher(c, "Apres avoir ajoute les deux cercles c1 et c2 : ");

Cercle c3 = new Cercle(5.4);

c.insertElementAt(c3, 1);

afficher(c, "Apres avoir insere le cercle c3 a l'indice 1 : ");

((Cercle) c.firstElement()).afficher(" numero 1 ");

System.out.println("Indice du cercle c3 : " + c.indexOf(c3));

Cercle c4 = new Cercle (44.4);

c.setElementAt(c4, 0);

afficher(c, "Apres avoir remplace l'element a l'indice 0 par c4 : ");

c.removeElementAt(1);

afficher(c, "Apres avoir retire l'element a l'indice 1 : ");

} }

/* Exécution :

Apres l'instruction : Vector c = new Vector();

(10)

Le vecteur est vide

Apres avoir ajoute les deux cercles c1 et c2 : Le vecteur contient 2 element(s)

Informations du cercle a l'indice 0 : - rayon : 10.2

- perimetre : 64.08849013323177 - surface : 326.851299679482 Informations du cercle a l'indice 1 : - rayon : 1.7

- perimetre : 10.681415022205297 - surface : 9.0792027688745

Apres avoir insere le cercle c3 a l'indice 1 : Le vecteur contient 3 element(s)

Informations du cercle a l'indice 0 : - rayon : 10.2

- perimetre : 64.08849013323177 - surface : 326.851299679482 Informations du cercle a l'indice 1 : - rayon : 5.4

- perimetre : 33.929200658769766 - surface : 91.60884177867838 Informations du cercle a l'indice 2 : - rayon : 1.7

- perimetre : 10.681415022205297 - surface : 9.0792027688745

Informations du cercle numero 1 : - rayon : 10.2

- perimetre : 64.08849013323177 - surface : 326.851299679482 Indice du cercle c3 : 1

Apres avoir remplace l'element a l'indice 0 par c4 : Le vecteur contient 3 element(s)

Informations du cercle a l'indice 0 : - rayon : 44.4

- perimetre : 278.9734276387736 - surface : 6193.210093580774 Informations du cercle a l'indice 1 : - rayon : 5.4

- perimetre : 33.929200658769766 - surface : 91.60884177867838 Informations du cercle a l'indice 2 : - rayon : 1.7

- perimetre : 10.681415022205297 - surface : 9.0792027688745

(11)

Le vecteur contient 2 element(s)

Informations du cercle a l'indice 0 : - rayon : 44.4

- perimetre : 278.9734276387736 - surface : 6193.210093580774 Informations du cercle a l'indice 1 : - rayon : 1.7

- perimetre : 10.681415022205297 - surface : 9.0792027688745

*/

Extrait du document de Sun sur son site : http://java.sun.com/j2se/1.4.1/docs/api/

Classe Vector (les vecteurs d’objets)

Ces schémas seront expliqués à compter de la semaine du 03 février jusqu’à la fin du trimestre.

java.lang.Object |

+-java.util.AbstractCollection |

+-java.util.AbstractList |

+-java.util.Vector All Implemented Interfaces:

Cloneable, Collection, List, RandomAccess, Serializable Direct Known Subclasses:

Stack

public class Vector extends AbstractList

implements List, RandomAccess, Cloneable, Serializable

Pour IFT 1170, on explique une partie des constructeurs et méthodes utilisées dans notre cours.

Constructor Summary (un sur 4 constructeurs offerts) Vector()

Construire un vecteur vide (nombre d’éléments vaut 0)

Method Summary (sommaire de quelques méthodes utilisées dans IFT 1170) void addElement(Object obj)

Adds the specified component to the end of this vector, increasing its size by one.

boolean contains(Object elem)

(12)

Tests if the specified object is a component in this vector.

Object elementAt(int index)

Returns the component at the specified index.

Enumeration elements()

Returns an enumeration of the components of this vector.

boolean equals(Object o)

Compares the specified Object with this Vector for equality.

Object firstElement()

Returns the first component (the item at index 0) of this vector.

Object get(int index)

Returns the element at the specified position in this Vector.

int indexOf(Object elem)

Searches for the first occurence of the given argument, testing for equality using the equals method.

int indexOf(Object elem, int index)

Searches for the first occurence of the given argument, beginning the search at index, and testing for equality using the equals method.

void insertElementAt(Object obj, int index)

Inserts the specified object as a component in this vector at the specified index.

boolean isEmpty()

Tests if this vector has no components.

Object lastElement()

Returns the last component of the vector.

int lastIndexOf(Object elem)

Returns the index of the last occurrence of the specified object in this vector.

int lastIndexOf(Object elem, int index)

Searches backwards for the specified object, starting from the specified index, and returns an index to it.

Object remove(int index)

Removes the element at the specified position in this Vector.

boolean remove(Object o)

Removes the first occurrence of the specified element in this Vector If the Vector does not contain the element, it is unchanged.

boolean removeElement(Object obj)

Removes the first (lowest-indexed) occurrence of the argument from this vector.

void removeElementAt(int index)

Deletes the component at the specified index.

void setElementAt(Object obj, int index)

Sets the component at the specified index of this vector to be the specified object.

int size()

Returns the number of components in this vector.

(13)

Returns a string representation of this Vector, containing the String representation of each element.

Références

Documents relatifs

If a ISO 8473 echo-request packet is sent with &#34;Lifetime&#34; field value of 1, the first hop node (router or end system) will return an error packet to the originator

This document redefines this high-order bit in the default metric field in TLVs 128 and 130 to be the up/down bit. L1L2 routers must set this bit to one for prefixes that

This document describes how to produce RSA/SHA1 SIG resource records (RRs) in Section 3 and, so as to completely replace RFC 2537,.. describes how to produce RSA KEY RRs in

The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of

Prospero URLs are interpreted by contacting a Prospero directory server on the specified host and port to determine appropriate access methods for a resource.. The access

Because that document has been made obsolete, this document copies the telnet URI scheme from it to allow that material to remain on standards

To retrieve the data associated with a Gopher+ URL, a client will connect to the server and send the Gopher selector, followed by a tab and the search string (which may be

The STREAMING extension provides the same functionality as the IHAVE command ([NNTP] section 6.3.2) but splits the query and transfer functionality into the CHECK and