Bug Calendrier

Résolu
Nohlan - 3 déc. 2012 à 22:45
 Utilisateur anonyme - 9 déc. 2012 à 23:54
Bonsoir,
Je me trouve fasse un petit bug assez bizarre sur mon code. Le truc est simple, je rentre un jour, puis un mois, et j'édite un calendrier dans une chaine de caractère.

Mais voilà le résultat :
Mois : 4
Année : 2012
NbrJoursDuMois = 30


Calendrier@56e5b723


Mon code est en 2 classes : une test qui contient le main et l'autre avec constructeur et méthodes.

Dans mon test j'appelle ma méthode String ToString comme ceci :

Calendrier laPoste;

// Envoye des informations recoltées au constructeur
laPoste = new Calendrier(mois, annee);

// .getNbJourDuMois() pour afficher le nombre de jour du mois de mon constructeur
// Juste une verification pour prouver aux personnes le nbr de jours

System.out.println("NbrJoursDuMois = "+laPoste.getNbJourDuMois());

System.out.println(" ");

System.out.print(laPoste);


Et ma méthode est celle ci :

public String ToString(){ 

String res=" ";

// estValide() sans paramétre veut dire vrai
if ( estValide())
{
for ( int i = 0 ; i <= nbrJourDuMois ; i++){

res += (res + " | " + i + " | ");

if ( i 9 || i 18){
System.out.println("");
}
}
}
else
System.out.println("Votre Date n'est pas valide");

return res;
}


Je ne vois pas l'erreur qui à mon avis est très très bête :)

Si quelqu'un pouvait me mettre sur la piste, je vous remercie d'avance.

Bonne soirée.

6 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
4 déc. 2012 à 08:37
Salut,

Commence par enlever la majuscule à ToString :

public String toString()
3
Utilisateur anonyme
4 déc. 2012 à 08:58
Salut,

Julien39 a raison, enlève la majuscule à ta méthode ToString(). Lorsque l'on veut afficher un objet comme tu l'as fait, c'est la méthode toString() de l'objet en question qui est appelée automatiquement. Si jamais tu voudrais vraiment utiliser ToString, tu devras faire System.out.print(calendrier.ToString());. Mais bon, avoir une méthode commençant par une majuscule est assez sale d'un point de vue normes Java et qualité du code.

Ton problème est-il résolu N


--
Pylouq
Heureux sont ceux qui lisent le Réglement, ils ne finiront peut-être pas au bûcher.
3
Bonjour, oui CE problème est résolu :) merci,

Mais un autre ce pose :(

En effet :

Mois : 2
Année : 2012

NbrJoursDuMois = 29

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2882)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:390)
at java.lang.StringBuilder.append(StringBuilder.java:119)
at Calendrier.toString(Calendrier.java:88)
at java.lang.String.valueOf(String.java:2826)
at java.io.PrintStream.print(PrintStream.java:633)
at TestCalendrier.main(TestCalendrier.java:29)



Peut être que l'expression contenu dans ma boucle For est mal écrite.
3
Je rajoute que "nbrJourDuMois" est dans mon constructeur.

nbrJourDuMois = nbJourDuMois( mois, annee);


Mais cette dernière fonctionne bien.

Je n'arrive pas a lancer le debug d’éclipse pour voir l’incrémentation de la chaine.
0

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

Posez votre question
Bien vue moi même :

res += (res + " | " + i + " | ");



 res += i + " |  ";


Encore merci pour vos réponses.
0
Utilisateur anonyme
9 déc. 2012 à 23:54
Salut,

J'ai regardé vite fait ton exception OutOfMemoryError, et en voyant ton code je pense pouvoir te donner une astuce qui peut optimiser ta gestion des chaînes de caractères afin d'éviter que cela ne bouffe trop de mémoire.

Au lieu de faire quelque chose qui va créer des String intermédiaires comme ici, fait plutôt comme plus bas :
res += (res + " | " + i + " | ");


StringBuilder sb = new StringBuilder();
sb.append(res);
sb.append(res);
sb.append(" | ");
sb.append(i);
sb.append(" | ");


C'est plus long je te l'accorde, mais tu optimises grandement ton code et tu économises de la mémoire. D'ailleurs, tu peux tout faire en une ligne comme ça : sb.append(res).append(res).append(" | ").append(i).append(" | ");

--
Pylouq
Heureux sont ceux qui lisent le Réglement, ils ne finiront peut-être pas au bûcher.
0
Rejoignez-nous