[java] Structure ArrayList pour dictionnaire

Fermé
timon44 Messages postés 53 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 17 décembre 2010 - 2 juin 2009 à 11:08
timon44 Messages postés 53 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 17 décembre 2010 - 2 juin 2009 à 20:03
Bonjour, je cherche à créer un genre de dictionnaire.

Je voudrais associer le type du mot, avec le mot par exemple, pour le mot "faire" associer "v" pour verbe.
Bon je commence juste, et voila ce que j'ai fait :

import java.util.*;

public class Dictionnaire {

		char type;
		String mot;

		/* constructeur */
		public Dictionnaire (char type, String mot) {
			
			ArrayList<char,String> dico;
			Dictionnaire(){dico = new ArrayList<char,String>();}

			
			
		}


Mais le char est souligné ("Syntax error on token "char", Dimensions expected after this token")

sinon ce que je pensais faire c'est quelque chose comme ça :
			String tab[]= new String[2];
            ArrayList dico = new ArrayList();
            dico.add(tab["verbe","faire"]);

Mais je ne sais pas comment l'implémenter...
A voir également:

13 réponses

sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
2 juin 2009 à 16:26
Oki, voici un exemple où l'on travaille avec un ArrayList pour stocker les paires:
import java.util.ArrayList;

public class Timon44 {
	private static class Mot {
		private String mot;
		private String type;

		public Mot(String mot, String type) {
			this.mot = mot;
			this.type = type;
		}

		public String getMot() {
			return mot;
		}

		public void setMot(String mot) {
			this.mot = mot;
		}

		public String getType() {
			return type;
		}

		public void setType(String type) {
			this.type = type;
		}
	}

	private static class Dico extends ArrayList<Mot> {
		public String getType(String key) {
			for (Mot mot : this) {
				if (mot.getMot().equals(key)) {
					return mot.getType();
				}
			}
			return null;
		}
	}

	public static void main(String[] args) {
		Dico dico = new Dico();

		// Comme notre classe Dico hérite d'ArrayList, utiliser une fonction de rajout déjà définie
		dico.add(new Mot("ceci", "pron. dém"));
		dico.add(new Mot("est", "vb."));
		dico.add(new Mot("un", "art."));
		dico.add(new Mot("exemple", "nom"));

		// Est-ce qu'un mot se trouve dans le dico ?
		System.out.println("Le mot 'wizz' dans le dico ? " + (dico.getType("wizz") != null));

		// Lister tous les mots du dico
		for (Mot mot : dico) {
			System.out.println(mot.getMot() + "==>" + mot.getType());
		}
	}
}
++
1
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
2 juin 2009 à 11:42
Salut,

Le constructeur d'ArrayList te permet de spécifier un unique template et non pas 2. Exemple:
ArrayList<String> dico;

++
0
timon44 Messages postés 53 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 17 décembre 2010 4
2 juin 2009 à 12:03
Et comment puis je faire, en utilisant arraylist ?
Parce que je voudrais faire un arraylist de couple(A,B) en fait ...
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
2 juin 2009 à 12:05
Tu crées un objet (ta classe à toi) pour garder les couples et tu insères dans l'ArrayList des instances de cet objet.

++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
timon44 Messages postés 53 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 17 décembre 2010 4
2 juin 2009 à 12:38
ok , merci, donc voila ce que j'ai fait :

j'ai créer une classe mot : (Mot.java)
public class Mot {
	
	String type;
	String mot;
	
	/* constructeur*/
	public Mot (){
		type="verbe";
		mot="faire";
	}
	
	public Mot(String pType, String pMot){
	
		type=pType;
		mot=pMot;
		
	}
	
	
}


Pour la classe main :
import java.util.ArrayList;
import java.util.Scanner;


public class Utilisatrice {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		
		Mot def = new Mot();
		Dictionnaire dico = new Dictionnaire();
		
		System.out.print("Mot: ");
		Scanner scanMot = new Scanner(System.in);
		String mot = scanMot.nextLine();
		
		System.out.println("Type: ");
		Scanner scanType = new Scanner(System.in);
		String type = scanType.nextLine();
		
		
	}

}


et la classe de Dictionnaire :
import java.util.ArrayList;
import java.util.Scanner;


public class Utilisatrice {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		
		Mot def = new Mot();
		Dictionnaire dico = new Dictionnaire();
		
		System.out.print("Mot: ");
		Scanner scanMot = new Scanner(System.in);
		String mot = scanMot.nextLine();
		
		System.out.println("Type: ");
		Scanner scanType = new Scanner(System.in);
		String type = scanType.nextLine();
		
		
	}

}


Mais je sais pas comment rentrer mot/type dans l'arraylist dico ....
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
2 juin 2009 à 12:53
Heuuu... Il faudrait décrire un peu plus ce que tu veux faire car le simple fait d'associer un mot à son type peut se faire de manière très simple en utilisant des classes existantes. Pas besoin de réinventer la roue... Exemple
import java.util.HashMap;
import java.util.Map;

public class Timon44 {
	public static void main(String[] args) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("ceci", "pron dem");
		map.put("est", "v");
		map.put("un", "art");
		map.put("exemple", "nom");

		for (String key : map.keySet()) {
			System.out.println(key + "==>" + map.get(key));
		}
	}
}
A l'exécution, on a ceci:
exemple==>nom
est==>v
un==>art
ceci==>pron dem


Précise, donc, ce que tu veux vraiment faire...

++
0
timon44 Messages postés 53 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 17 décembre 2010 4
2 juin 2009 à 13:01
Alors en fait, je veux faire plusieurs méthodes :
test si dico contient le mot, ajouter un mot au dico, supprimer un mot, donner le type d'un mot (donc rechercher si le mot existe, et retourner son type)

En fait c'est un exo que je fais pour réviser pour mon examen ... et j'ai vraiment du mal en java. J'ai lu tout le tuto du siteduzero (enfin pas tout jusqu'à la fin, il y a des choses pas au programme)
Et je dois faire l'implementation d'un dico, en arraylist, et en table de hashage ... et comparer les deux.
Donc pour l'instant je fait en arraylist....
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
2 juin 2009 à 13:10
Alors en fait, je veux faire plusieurs méthodes :
test si dico contient le mot, ajouter un mot au dico, supprimer un mot, donner le type d'un mot (donc rechercher si le mot existe, et retourner son type)
==>

C'est OK, ça existe déjà (interface Map, diverses implémentations, e.g. HashMap):

test si dico contient le mot "ex" ==> méthode map.get("ex") // retourne null si pas de mot dans map
ajouter un mot au dico ==> map.put(mot, type_mot)
supprimer un mot ==> map.remove(mot)
donner le type d'un mot ==> map.get("ex")

++
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
2 juin 2009 à 13:13
[Edit] Pardon, pas capté qu'il s'agissait d'un exo... Et donc que tu veux absolument travailler avec un ArrayList. Vais me repencher sur cette question après le déjeuner =)
0
timon44 Messages postés 53 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 17 décembre 2010 4
2 juin 2009 à 13:15
ok, jte remercie beaucoup, de toute maniére, je vais aussi bosser sur hashmap, donc ce que tu m'as dis mesera surement trés utile !!
0
timon44 Messages postés 53 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 17 décembre 2010 4
2 juin 2009 à 18:41
alors, déjà un grand merci !! ^^
sinon je comprends pas cette boucle :
for (Mot mot : this) {
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
2 juin 2009 à 19:28
sinon je comprends cette boucle : <== tu veux dire que tu ne comprends pas?

for (Mot mot : this) {
signifie: itère sur l'ensemble des éléments de this (qui est un Dico, donc un ArrayList, on peut donc itérer dessus)

++
0
timon44 Messages postés 53 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 17 décembre 2010 4
2 juin 2009 à 20:03
haaa d'accord, je ne savais que l'on pouvait faire comme ça !
0