Septième semaine

Exercice 1
Travail sur la notion de vecteur. Vecteur.java
VecteurAbstrait.java
VecteurStatique.java
VecteurDynamique.java
Exercice 2
La classe Stack et l'inversion de chaine de caractères.
MiroirLettres.java
Exercice 3
Toujours la classe Stack, mais manipulation de mots.
MiroirMots.java
Exercice 4
La classe Vector (assez proche de notre VecteurDynamique )
CompterMotsAvecVector.java
Exercice 5
La classe HashTable.
CompterMotsAvecHashtable .java

Cette semaine, un petit moins d'exercices, mais un peu plus d'utilisation et de découvertes de différents outils.

Redémarrage sous un OS digne de ce nom : Linux.

Une fois votre machine redémarrée sous Linux, loguez-vous et ouvrez une console (Xterm).

Nous allons maintenant effectuer l'installation de votre environnement de travail. Pour cela, il faut d'abord vérifier que vous avez accés aux outils Java :

secq@beckett:~/iut/>java -version
java version "1.3.1_02"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_02-b02)
Java HotSpot(TM) Client VM (build 1.3.1_02-b02, mixed mode)


Si vous voyez s'afficher quelque chose ressemblant à ce qui est ci-dessus, c'est que votre JVM est bien installée.
(sinon, il faut localiser la JVM par exemple en tapant locate java et rajouter le répertoire bin du JDK dans le PATH)

Installation d'un éditeur de texte digne de ce nom : JEdit

Après avoir subit les affres d'UltraEdit, nous allons passer à un éditeur un peu plus sérieux : JEdit. Cet éditeur est écris en Java, pour les développeurs Java (vous trouverez pleins d'informations le concernant sur www.jedit.org ). Il fournit de nombreux outils très pratique que vous découvrirez en l'utilisant.

Dans un premier temps, il vous faut récupérer l'archive du programme pour pouvoir l'installer. Allez donc chercher sur le site la version binaire du programme (en effet, vous n'aurez pas tout de suite besoins de ses sources ! :) et chargez là.

Release candidate of next stable version: 4.0pre8
Download: Java-based installer 1.7 Mb (For any operating system)
(au cas ou le lien ne fonctionnerait pas, essayez plutot ce lien )

Une fois l'archive chargée, vous devriez avoir un fichier nommé jedit40pre8install.jar.

Créez un répertoire 'java' à l'intérieur du quel vous créerez aussi un répertoire 'tools ', un répertoire 'tds' et un répertoire 'projet'.

Déplacer le fichier jedit40pre8install.jar dans le répertoire tools et lancer la commande :

secq@beckett:/java/tools/>java -jar jedit40pre8install.jar


Ceci débutera l'installation de JEdit. Suivez les instructions de telles manières que Jedit soit installé dans le répertoire '~/java/tools'.

Voilà, ensuite il vous suffit de lancer JEdit et éventuellement d'ajouter des plugins en utilisant le PluginManager (installez JBrowse, pour le reste vous verrez plus tard).

Installation d'un outil fort pratique pour la JavaDoc : DocWiz

DocWiz est un petit utilitaire facilitant l'écriture de JavaDoc. D'abord il vous faut récupérer l'archive soit sur le site du projet docwiz.sourceforge.net ou la copie locale DocWiz0.68.jar . Placez cette archive dans le répertoire 'tools '.

Pour lancer DocWiz, il vous suffit de taper la commande suivante : java -jar DocWiz0.68.jar.


Exercice 1 :

Ecrire et tester les classes VecteurStatique et VecteurDynamique en introduisant une classe abstraite VecteurAbstrait regroupant les méthodes communes aux deux. Cette classe implémentera l'interface Vecteur définie en TD.

interface Vecteur {

    public void setAt(int index, Object o);

    public Object getAt(int i);

    public int size();

    public void clear();

}

Voici la classe vous permettant de tester vos classes :

class TestVecteur
{
        public static void main(String[] args)
        {
                Vecteur v = new VecteurStatique(5);
                for (int i=0; i<5; i++) {
                        v.setAt(i, new String("item "+i));
                }
                System.out.println("Taille = "+v.size()+" and v = "+v);
                v.setAt(3, null);
                System.out.println("Removing third element");
                System.out.println("Taille = "+v.size()+" and v = "+v);

                v = new VecteurDynamique();
                for (int i=0; i<15; i++) {
                        v.setAt(i, new String("item "+i));
                }
                System.out.println("Taille = "+v.size()+" and v = "+v);
                v.setAt(3, null);
                System.out.println("Removing third element");
                System.out.println("Taille = "+v.size()+" and v = "+v);
                System.out.println("Trying to retrieve 60th element = "+v.getAt(60));
        }
}


Et le résultat produit devra etre le suivant :

secq@beckett:~/IUT/coo/td7$ java TestVecteur
Taille = 5 and v = {item 0, item 1, item 2, item 3, item 4}
Removing third element
Taille = 4 and v = {item 0, item 1, item 2, null, item 4}
Taille = 15 and v = {item 0, item 1, item 2, item 3, item 4, item 5, item 6, item 7, item 8, item 9, item 10, item 11, item 12, item 13, item 14}
Removing third element
Taille = 14 and v = {item 0, item 1, item 2, null, item 4, item 5, item 6, item 7, item 8, item 9, item 10, item 11, item 12, item 13, item 14}
Trying to retrieve 60th element = null



Exercice 2 :

Le programme suivant, en utilisant la classe StringTokenizer de java.util, affiche tous les mots de la String (vue comme une phrase) : "this is a
test" :

public class Application {
    public static void main(String args[]) {
        StringTokenizer st = new StringTokenizer("this is a test");
        while (st.hasMoreTokens())
            System.out.print(st.nextToken()+" / ");
    }
}


résultat d'exécution : this / is / a / test / On s'inspirera du programme précédent pour extraire les mots des Strings (phrases) dans les exercices suivants.

Utiliser une Stack pour retourner les caractères d'une String, cela se fait en deux phases, une première phase où l'on empile les caractères de la String (parcourue de gauche à droite) et une deuxième phase où l'on fabrique une nouvelle String en assemblant les caractères dépilés. Afficher la nouvelle String.

Ex : à partir de la String "this is a test" on fabrique la String "tset a si siht"

Exercice 3 :

Utiliser une Stack pour retourner les mots d'une String, on utilisera l'algorithme de l'exo précédent. Afficher la nouvelle String

Ex : à partir de la String "this is a test" on fabrique la String "test a is this"


Exercice 4 :

Utiliser un Vector pour batir une table des mots extraits d'une String (chaque mot n'est mis qu'une seule fois dans la table). Puis afficher les mots de la table (une énumération peut être avantageusement utilisée).

Ex : à partir de la String "this is this test" on affiche : this is test



Exercice 5 :

Utiliser une Hashtable pour batir une table des mots extraits d'une String (comme dans l'exo précédent) tout en les comptant, puis afficher les mots de la table et leur nombre (énumération ?). On utilisera des couples:
clé=String / valeur=int.
Il faut encapsuler l'entier pour en faire un Object en utilisant la classe wrapper Integer.

Ex : à partir de la String "this is this test" on affiche : (2,this) (1,is) (1,test)

La classe Integer n'est pas très pratique car comme elle est finale on ne peut lui rajouter une incrémentation qui simplifirait l'écriture, il faut donc encapsuler l'entier dans une classe écrite pour cela et munie d'une méthode d'incrémentation. Réécrire le programme en utilisant une telle classe.