GameCorp - Index des forumsGame MakingProgrammationProgrammation[JAVA] programme de création de listes
[JAVA] programme de création de listes
| Huntil |
Posté le 25 Nov 2008 à 21:58
|
|
||||||||||||||||||||
![]() Messages : 1012 GCPoints : 289843 |
J'ai commencé un petit programme qui permet de créer des listes de définitions que j'ai appelé dicos (bon pour l'instant les "dicos" ne sont pas encore triés par ordre alphabétique mais j'y songe) et de faire quelques exercices à partir de ces dicos. J'aimerais avoir vos critiques. Le programme n'est pas parfait donc n' hésitez pas à dire tout le mal que vous en pensez. Voici quelques problèmes que j'ai rencontré: -Je peux compiler, mais j'ai ce message d'avertissement que je ne comprends pas: Citation :
-Est-ce que c'est une bonne idée de nommer toute les variables membres d'une classe par "m_nomdelavariable" ? Je n'aime pas beaucoup mon timer. J'ai trouvé un exemple sur internet où on dérive la classe TimerTask, mais dans mon bouquin de java ils utilisent une interface, seulement j'ai pas encore bien pigé le truc. Dans tout les cas quand on perd je ne sais pas comment terminer l'exercice. Vous n'êtes pas obligé de lire les commentaires, ce sont des notes à usage personnel pour l'instant Voici une liste pour ceux qui veulent tester le programme:
humanbody.txt a écrit :
Remarquez que cette liste ne ce prête pas bien au deuxième exercice. Il est plus intéressant d'avoir à citer une liste exhaustive, comme les mots clés d'un langage de programmation. sources: Revision2.java Spoiler - Cliquez pour afficher Code : import java.io.*;
import java.util.*;
// élément du dico: un mot et sa définition (définir la relation ? traduction, définition, date,...)
class Item
{
public Item() {};
public Item(String m, String d)
{
mot = m;
definition = d;
}
public void setMot(String m)
{
mot = m;
}
public void setDefinition(String d)
{
definition = d;
}
public String getMot()
{
return mot;
}
public String getDefinition()
{
return definition;
}
private String mot;
private String definition;
}
// dico: groupe d' "item"
class Dico //trier par ordre alphabétique
{
public Dico() {}
public Dico(String n, String d)
{
nom = n;
description = d;
}
public void ajouterItem()
{
String mot, definition;
System.out.print("mot a definir: ");
mot = Clavier.lireString();
System.out.print("definition du mot: ");
definition = Clavier.lireLigne();
Item i = new Item(mot, definition);
listeItems.add(i); //unchecked operation ???
}
public void supprimerItem(String mot)
{
Item item;
boolean supprime = false;
suppression:
for(int i = 0; i < listeItems.size(); i++)
{
item = (Item)listeItems.get(i);
if (item.getMot().equals(mot))
{
listeItems.remove(i);
break suppression;
}
}
}
public void afficher()
{
Item item;
System.out.println();
System.out.println("Dico: " + nom);
System.out.println(description);
System.out.println();
for(int i = 0; i < listeItems.size(); i++)
{
item = (Item)listeItems.get(i);
System.out.println(item.getMot() + " = " + item.getDefinition());
}
System.out.println();
}
public void enregistrer(PrintWriter out) throws IOException //exception à comprendre
{
Item item;
out.print(nom + "|" + description);
for(int i = 0; i < listeItems.size(); i++)
{
item = (Item)listeItems.get(i);
out.print("|" + item.getMot() + "|");
out.print(item.getDefinition());
}
out.println("|");
}
public void charger(BufferedReader in) throws IOException
{
String s = in.readLine();
StringTokenizer t = new StringTokenizer(s, "|");
nom = t.nextToken();
description = t.nextToken();
listeItems.setSize(0); //remettre à zéro un vecteur
while(t.hasMoreTokens())
{
Item item = new Item();
item.setMot(t.nextToken());
item.setDefinition(t.nextToken());
listeItems.add(item);
}
}
// réviser à partir des définitions
public void exercice1()
{
if(listeItems.size() == 0)
{
System.out.println("Il n'y a aucun mot dans le dico !");
System.exit(0);// quitter la fonction (euh... pas le programme quand meme...) ; erreur -> argument de exit ???
}
int note; // nom de la variable note ???
int nbre_bonnes_reponses = 0;
Item item;
int random_int = 0;
int precedant = 0;
String reponse;
if(listeItems.size() < 5) note = listeItems.size();
else if(listeItems.size() < 10) note = 5;
else if(listeItems.size() < 20) note = 10;
else note = 20;
for(int compteur = 0; compteur < note; compteur++)
{
while(random_int == precedant) random_int = (int)(java.lang.Math.random()*listeItems.size());
precedant = random_int;
item = (Item)listeItems.get(random_int);
System.out.println(item.getDefinition());
System.out.println("est la definition de: ");
reponse = Clavier.lireString();
if(reponse.equals(item.getMot()))
{
System.out.println("Bonne reponse");
nbre_bonnes_reponses++;
}
else
{
System.out.println("Mauvaise reponse");
}
System.out.println(nbre_bonnes_reponses + "/" + (compteur+1)); //inutile en console
}
System.out.println("Votre score final est: " + nbre_bonnes_reponses + "/" + note);
}
// citer la liste
public void exercice2()
{
if(listeItems.size() == 0)
{
System.out.println("Il n'y a aucun mot dans le dico !");
System.exit(0);// quitter la fonction (euh... pas le programme quand meme...) ; erreur -> argument de exit ???
}
int note; // nom de la variable note ???
int nbre_bonnes_reponses = 0;
int nbre_minutes = 3;
Item item;
String reponse;
System.out.println(description);
System.out.println("Il y a " + listeItems.size() + " elements a citer.");
System.out.println("Duree de l'exercice ? (min): ");
nbre_minutes = Clavier.lireInt();
Vector itemsRestantes = new Vector();
Vector itemsTrouvees = new Vector();
for(int i = 0; i < listeItems.size(); i++)
{
item = (Item)listeItems.get(i);
itemsRestantes.add(item);
}
ExerciceTimer ex_timer = new ExerciceTimer(nbre_minutes);
while(itemsRestantes.size() > 0)
{
System.out.print("-> ");
reponse = Clavier.lireString();
for(int i = 0; i < itemsRestantes.size(); i++)
{
item = (Item)itemsRestantes.get(i);
if(reponse.equals(item.getMot()))
{
itemsRestantes.remove(i);
itemsTrouvees.add(item);
i = itemsRestantes.size(); //correct pour sortir ?
}
}
System.out.println();
System.out.print("elements trouves: ");
for(int i = 0; i < itemsTrouvees.size(); i++)
{
item = (Item)itemsTrouvees.get(i);
System.out.print(item.getMot() + " ");
}
System.out.println();// "/n"
if(itemsRestantes.size() > 0)
{
System.out.println("Il reste " + itemsRestantes.size() + " elements a trouver:");
}
}
ex_timer.terminer();
System.out.println("Bravo ! Vous avez trouvez tout les elements !");
}
public String getNom()
{
return nom;
}
private String nom;
private String description;
private Vector listeItems = new Vector(); //initialiser listeItems ici ou dans constructeurs ?
}
// timer pour les exercices(exercice2 uniquement pour l'instant)
class ExerciceTimer
{
public ExerciceTimer(int min)
{
nbre_minutes = min;
timer = new Timer();
timer.schedule(new Action(), 0, 60000);
}
public void terminer()
{
timer.cancel();
}
class Action extends TimerTask // autrement que héritage ? implements ?
{
public void run()
{
if (nbre_minutes > 0)
{
System.out.println("Plus que " + nbre_minutes + " minutes !");
nbre_minutes--;
}
else
{
System.out.println("Le temps imparti est ecoule."); //GAME OVER -> finir l'excercice
//itemsRestantes.setSize(0); //un peu barbare non ?
timer.cancel();
}
}
}
private Timer timer;
private int nbre_minutes;
}
public class Revision2
{
public static void main(String[] args)
{
Dico dico = new Dico();
String fichier;
boolean continuer = true; //inutile car Quitter = System.exit(0)
while(continuer)
{
System.out.println();
System.out.println("----------------------");
System.out.println(" DICO LEARN ");
System.out.println("----------------------");
System.out.println("1 Nouveau dico");
System.out.println("2 Ouvrir dico"); //renommer dico
System.out.println("3 Reviser un dico");
System.out.println("4 Quitter");
System.out.println();
System.out.print("Option choisie: ");
int choix;
choix = Clavier.lireInt();
System.out.println();
switch(choix)
{
case 1:
System.out.println("Creation d'un dico");
System.out.println("----------------------");
String nom, description;
System.out.println("Donnez un nom au dico (pas d'espace): ");
nom = Clavier.lireString();
System.out.println("Donnez une description en une ligne de ce dico: ");
description = Clavier.lireLigne(); // "Autre cas" quand espace dans nom -> ?
Dico nouveau_dico = new Dico(nom, description);
try
{
PrintWriter out = new PrintWriter(new FileWriter( nom + ".txt"));
nouveau_dico.enregistrer(out);
out.close();
}
catch(IOException e)
{
System.out.print("Erreur: " + e);
System.exit(1);
}
System.out.println();
System.out.println(" - Dico enregistre -");
break;
case 2:
System.out.println("Modifier un dico");
System.out.println("----------------------");
System.out.println("Quel dico voulez-vous modifier ?");
fichier = Clavier.lireString();
try
{
BufferedReader in = new BufferedReader(new FileReader(fichier + ".txt"));
dico.charger(in);
in.close();
}
catch(IOException e)
{
System.out.println("Erreur : " + e);
System.exit(1);
}
dico.afficher();
menu2:
while(true)
{
System.out.println("----------------------");
System.out.println("1 Ajouter un mot au dico");
System.out.println("2 Enlever un mot du dico");
System.out.println("3 Reafficher le dico");
System.out.println("4 Enregistrer et retourner au menu principal");
System.out.println();
System.out.print("Option choisie: ");
int choix2;
choix2 = Clavier.lireInt();
switch(choix2)
{
case 1:
dico.ajouterItem();
break;
case 2:
String mot;
System.out.print("Quel mot voulez-vous supprimer du dico ? ");
mot = Clavier.lireString();
dico.supprimerItem(mot);
break;
case 3:
dico.afficher();
break;
case 4:
System.out.println("Enregistrer");
System.out.println("----------------------");
try
{
PrintWriter out = new PrintWriter(new FileWriter( dico.getNom() + ".txt"));
dico.enregistrer(out);
out.close();
}
catch(IOException e)
{
System.out.print("Erreur: " + e);
System.exit(1);
}
System.out.println();
System.out.println(" - Dico enregistre -");
break menu2;
default:
System.out.println("Entre invalide");
break;
}
}
break;
case 3:
System.out.println("Reviser");
System.out.println("----------------------");
System.out.println("Quel dico voulez-vous reviser ?");
fichier = Clavier.lireString();
try
{
BufferedReader in = new BufferedReader(new FileReader(fichier + ".txt"));
dico.charger(in);
in.close();
}
catch(IOException e)
{
System.out.println("Erreur : " + e);
System.exit(1);
}
System.out.println();
System.out.println("A quel type d'excercice voulez-vous vous entrainez ?");
menu3: //ou plutot booleen ?
while(true)
{
System.out.println("----------------------");
System.out.println("1 Trouver le mot correspondant a la definition");
System.out.println("2 Citer le maximum d'elements du dico");
System.out.println();
System.out.print("Option choisie: ");
int choix3;
choix3 = Clavier.lireInt();
switch(choix3)
{
case 1:
dico.exercice1();
break menu3;
case 2:
dico.exercice2();
break menu3;
default:
System.out.println("Entre invalide");
break;
}
}
break;
case 4:
System.out.println("Quitter");
System.out.println("----------------------");
System.exit(0);
break;
default:
System.out.println("Entree invalide");
break;
}
}
}
}PS: arf ça craint du code dans un spoiler.
Dernière édition le 26 Nov 2008 à 12:41
Copyright © 2007 - 2010 Huntil
"Il faut toujours un drame" |
|||||||||||||||||||||
| gouessej |
Posté le 26 Nov 2008 à 11:30
|
|
||||||||||||||||||||
![]() Messages : 337 GCPoints : 64624 |
Citation :
C'est juste que tu dois utiliser des méthodes dépréciées et/ou tu dois ne pas préciser le type là où ce serait plus sûr de le faire. Je vais jeter un coup d'oeil à ton code tout de suite. S'il te plaît, corrige ton lien.
Dernière édition le 26 Nov 2008 à 11:32
|
|||||||||||||||||||||
| gouessej |
Posté le 26 Nov 2008 à 11:38
|
|
||||||||||||||||||||
![]() Messages : 337 GCPoints : 64624 |
Citation :
Mets plutôt : private Vector<Item> listeItems = new Vector<Item>(); Cela rend l'utilisation de certains forçages de type (cast) inutile. C'est curieux, tu mets tous les attributs de la classe à la fin. Ah, ça fait du bien de voir du Java
Dernière édition le 26 Nov 2008 à 11:39
|
|||||||||||||||||||||
| Huntil |
Posté le 26 Nov 2008 à 12:26
|
|
||||||||||||||||||||
![]() Messages : 1012 GCPoints : 289843 |
Citation :
Celui de la liste pour tester ? Citation :
Ok, la méthode add de Vector attend un objet en argument alors que j'envois un "Item". Citation :
C'est comme ça dans mon bouquin Au coeur de Java 2 (qui commence sérieusement à dater), pour conforter l'idée que les variables d'instance doivent être mises à l'écart. Je pense que je vais reprendre l'habitude de les mettre au début. D'ailleurs je vais commencer à coder plus sérieusement et à être plus productif vu que je viens d'installer eclipse, mais je ne regrette pas d'avoir travailler juste avec la console et notepad++. Par contre pour le nom des attributs tu n'as pas donnés ton avis: tu penses que c'est une bonne idée de mettre systématiquement m_ au début (je crois que c'est M@teo21 qui propose ça dans son tuto C/C++). Au moins on c'est à quoi on a affaire et on peut réutiliser le nom de la variable.
Dernière édition le 26 Nov 2008 à 17:22
Copyright © 2007 - 2010 Huntil
"Il faut toujours un drame" |
|||||||||||||||||||||
| gouessej |
Posté le 27 Nov 2008 à 20:15
|
|
||||||||||||||||||||
![]() Messages : 337 GCPoints : 64624 |
Pour les conventions de nommage, c'est une question de goût, l'essentiel est de les respecter jusqu'au bout. Il y a officiellement les "Java Code Conventions", ça peut t'inspirer. Pour l'instance de Vector, si tu utilises Vector<Item> à la place, la méthode add(...) prend en paramètre une instance d'Item. Prends une documentation Java récente, pas celle de Java 1.4 et tu verras bien boolean add(E e) où E est la classe qui paramètre l'instance de Vector. http://java.sun.com/javase/6/docs/api/ |
|||||||||||||||||||||
GameCorp - Index des forumsGame MakingProgrammationProgrammation[JAVA] programme de création de listes
Répondre

