fffff
D'après le message tu as saisi "ferme" au clavier alors qu'un nombre était attendu.
Merci pour ta réponseEn fait j'ai bien pigé ce que veux dire l'erreur, mais je ne comprends pas pourquoi elle se produit, puisque il n'y a aucun endroit où je saisi une chaine et que je la rentre dans une variable entière et inversement.
Il me dit que j'ai saisi ferme, parce que dans cet exemple, j'ai saisi "Martine à la ferme" pour le titre d'un Document. Comme précisé plus haut, si j'avais tapé "Martine"(un seul mot), ça aurait marché, mais là c'est un titre composé de plusieurs mots et là ça bug...
Salut,
J'ai testé ton code et il fonctionne parfaitement ! J'ai toutefois utiliser une classe de ma composition (ta classe Clavier) pour lire les entrés, puisque tu ne l'avais pas fournis.
Le fait est que tu entre une chaine là où un entier est attendu.
Il y a une erreur sur la recherche (l'opérateur == ne permet pas de tester une égalité de chaine).
Tout d'abord merci pour ton aide, pour le fichier clavier, c'est un fichier fourni par l'iut qu'on utilise depuis le début de l'année, pour les saisies clavier, il a toujours bien marché, je te le met en fichier joint. Pour la recherche, pas de problème de "==", j'ai ma méthode qui retourne vrai si la cote est présente, et dedans il y a bien un "==". J'espère avoir loupé quelquechose et que tu as raison, met moi le bout de code fautif pour que je vois ce que tu veux dire
Enfin, je me répète, mais je ne vois aucun endroit où j'entre une chaine alors qu'un entier est attendu, ça ne le fait que quand ma chaine(que j'entre pour le titre du document à créer) que quand ma chaine fait plusieurs mois, sinon ça marche très bien...
Merci encore![]()
Sans doute.
Non. Mais peut-être ne parlons nous pas de la même chose. Le problème est dans ta méthode aCetteCote(String c) de la classe Document. Tu teste une égalité entre deux String avec l'opérateur ==, et cela retournera toujours false. Ce qui est confirmé par l'expérimentation, car la recherche renvoie null alors que la "cote" a bien été enregistré dans la médiathèque.
Si tu as une exception c'est que cela est. Le fait de voir ou ne pas voir est autre chose.
Je n'obtiens pas ce comportement, mais au contraire cela fonctionne parfaitement, quelque soit le nombre de mot du titre.
Nous sommes bien en train de parler du même code ? Tu ne testerais pas un code différent de celui que tu nous a fournis ?
Sinon, indique toutes les entrés que tu fait pour arriver à l'exception, que l'on puisse reproduire exactement la même erreur.
Je viens te tester ta classe Clavier, et si c'est elle qui est en cause.
Tu doit utiliser la méthode lireLigne() et non lireString().
La javadoc indique :
Les espaces, tabulations et sauts de lignes sont "passés". La lecture attend l'arrivée d'autres caractères dans le buffer. En particulier, on ne peut pas saisir une chaîne vide, ou une chaîne avec des espaces.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ti = Clavier.lireLigne();
Merci infiniment ! En effet, dans ma méthode aCetteCote, en mettant la premièrechaine.equals(ladeuxièmechaine) à la place de "==" ça fonctionne. C'est marrant, c'est une erreur grossière, dont je ne me rappelait plus du tout...
Pour ce qui est de la saisi Clavier, en fait je me suis rappellé que la classe Clavier que j'avais provenait d'un site internet quelconque et donc ce n'était pas la même qu'à l'iut, j'ai trouvé celle de l'iut, et là même en mettant lireString, ça fonctionne avec plusieurs mots, enfin voila, tout marche
Merci encore pour votre aide rapide et surtout pertinente !![]()
J'ai un nouveau petit soucis, j'ai ajouté pas mal de choses dans mon programme, ce qui fait que ma main dans GestionM, j'ai pas mal de menu et sous menu. Et il se trouve que je voudrais pouvoir revenir au menu principal quand je suis dans un sous menu, autrement dit, relancer la main. Mais on ne peut pas apeller la fonction main() dans la main si ?
Et autre chose, si je sors du programme et que je le relance, rien n'est sauvegardé, comment faire pour que les valeurs dans mes listes (documents ajoutés...) soit réellement sauvegardés ?
Merci encore![]()
C'est ton algo qui devrait te permettre de revenir à ton menu principalPrévois juste un nombre (ou une lettre) qui permet de passer du sous menu au menu.
La sérialisation est un mécanisme de sauvegarde des objets, tu as un bon tuto sur le site. La désérialisation est le mécanisme inverse.
ba en fait j'ai tout claqué les diffèrents menus dans ma main, donc je n'ai pas de méthode pour le menu principal, de méthode pour le sous menu1, une autre pour sous menu2..., tout est imbriqué dans la main.
Je veux bien te mettre ma classe GestionM, mais je te préviens, c'est un peu le bor*** , avec tous ces noms de variables mis un peu à la va vite...
Je t'en voudrais pas si tu comprends rien![]()
en fait c'est possible de copier tout le code avec le menu principal dans une méthode, mais j'ai peur d'avoir des problèmes style static non static qui vont mettre le bazar...
Ce sont tes cours d'algo qui vont t'aider sur ce coup là.
Voici un exemple simple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 import java.util.Scanner; public class Test { public static void main(String[] args) { char c = ' '; while (c != 'q') { System.out.println("Menu principal"); System.out.println("1. sous menu 1"); System.out.println("2. sous menu 2"); System.out.println("q. quitter"); Scanner sc = new Scanner(System.in); c = sc.nextLine().charAt(0); if (c == '1') { while (c != 'r') { System.out.println("Sous menu 1"); System.out.println("r. retour"); c = sc.nextLine().charAt(0); } } else if (c == '2') { while (c != 'r') { System.out.println("Sous menu 2"); System.out.println("r. retour"); c = sc.nextLine().charAt(0); } } } } }
t'es vraiment le meilleur, j'ai mis du temps à comprendre, je pensais que j'allais devoir modifier beaucoup de choses, et pour finir, j'ai simplement rajouter un while tout autour et ça marche à merveille, merci encore![]()
Partager