Passage de void à String en Java
Résolu
Moon Yagami
Messages postés
17
Statut
Membre
-
Moon Yagami Messages postés 17 Statut Membre -
Moon Yagami Messages postés 17 Statut Membre -
Bonjour,
La tache à l'air facile comme ça, mais ayant transformé une fonction d'affichage de void en String(en modifiant System.out.print par une chaine qui reçoit le texte à afficher), le résultat n'est pas le meme! pourriez-vous m'aider à comprendre mon erreur?
FONCTION VOID
public void printItemsets(int nbObject) {
System.out.println (" ------- " + name + " -------");
int patternCount = 0;
int levelCount = 0;
for (List<ItemsetApriori> level : levels) {
System.out.println(" L" + levelCount );
for (ItemsetApriori itemset : level) {
System.out.print( " pattern " + patternCount + ": ");
itemset.print();
System.out.print( "support : "
+ itemset.getSupportRelatifFormatted(nbObject));
patternCount++;
String closed = itemset.isClose() ? "closed" : "";
System.out.println( " (" + itemset.getAbsoluteSupport() + "/"
+ nbObject + ") " + closed);
if (itemset.isPseudoclose()) {
System.out.println("pseudo-closed, closure: ");
itemset.getClosure().print();
System.out.print(" ("
+ itemset.getClosure().getAbsoluteSupport() + "/"
+ nbObject + ")");
}
System.out.print("");
}
levelCount++;
}
System.out.println(" --------------------------------");
}
RESULTAT AFFICHE :
------- FREQUENT ITEMSETS -------
L0
pattern 0: support : 1 (8/8)
L1
pattern 1: 1 support : 0,75 (6/8)
pattern 2: 2 support : 0,62 (5/8)
pattern 3: 3 support : 0,5 (4/8)
pattern 4: 4 support : 0,62 (5/8)
pattern 5: 5 support : 0,62 (5/8)
L2
pattern 6: 1 5 support : 0,5 (4/8)
--------------------------------
FONCTION STRING
public String printItemsets(int nbObject) {
String retour= "";
retour+= " ------- " + name + " -------\n";
int patternCount = 0;
int levelCount = 0;
for (List<ItemsetApriori> level : levels) {
retour+= " L" + levelCount + " \n";
for (ItemsetApriori itemset : level) {
retour+= " pattern " + patternCount + ": ";
itemset.print();
retour+= "support : "
+ itemset.getSupportRelatifFormatted(nbObject);
patternCount++;
String closed = itemset.isClose() ? "closed" : "";
retour+= " (" + itemset.getAbsoluteSupport() + "/"
+ nbObject + ") " + closed+ "\n";
if (itemset.isPseudoclose()) {
retour+= "pseudo-closed, closure: \n";
itemset.getClosure().print();
retour+= " ("
+ itemset.getClosure().getAbsoluteSupport() + "/"
+ nbObject + ")";
}
retour+= "";
}
levelCount++;
}
retour+= " --------------------------------\n";
return retour ;
}
AFFICHAGE:
------- FREQUENT ITEMSETS -------
L0
pattern 0: support : 1 (8/8)
L1
pattern 1: support : 0,75 (6/8)
pattern 2: support : 0,62 (5/8)
pattern 3: support : 0,62 (5/8)
pattern 4: support : 0,62 (5/8)
--------------------------------
Après pattern 1, il devrait y avoir : 1, Itemset.print() n'affiche que dans la console et qu'une seule fois !
J'ai beau voir et revoir ce code je ne comprends pas! j'utilise Netbeans 7.1.2 merci d avance :)
La tache à l'air facile comme ça, mais ayant transformé une fonction d'affichage de void en String(en modifiant System.out.print par une chaine qui reçoit le texte à afficher), le résultat n'est pas le meme! pourriez-vous m'aider à comprendre mon erreur?
FONCTION VOID
public void printItemsets(int nbObject) {
System.out.println (" ------- " + name + " -------");
int patternCount = 0;
int levelCount = 0;
for (List<ItemsetApriori> level : levels) {
System.out.println(" L" + levelCount );
for (ItemsetApriori itemset : level) {
System.out.print( " pattern " + patternCount + ": ");
itemset.print();
System.out.print( "support : "
+ itemset.getSupportRelatifFormatted(nbObject));
patternCount++;
String closed = itemset.isClose() ? "closed" : "";
System.out.println( " (" + itemset.getAbsoluteSupport() + "/"
+ nbObject + ") " + closed);
if (itemset.isPseudoclose()) {
System.out.println("pseudo-closed, closure: ");
itemset.getClosure().print();
System.out.print(" ("
+ itemset.getClosure().getAbsoluteSupport() + "/"
+ nbObject + ")");
}
System.out.print("");
}
levelCount++;
}
System.out.println(" --------------------------------");
}
RESULTAT AFFICHE :
------- FREQUENT ITEMSETS -------
L0
pattern 0: support : 1 (8/8)
L1
pattern 1: 1 support : 0,75 (6/8)
pattern 2: 2 support : 0,62 (5/8)
pattern 3: 3 support : 0,5 (4/8)
pattern 4: 4 support : 0,62 (5/8)
pattern 5: 5 support : 0,62 (5/8)
L2
pattern 6: 1 5 support : 0,5 (4/8)
--------------------------------
FONCTION STRING
public String printItemsets(int nbObject) {
String retour= "";
retour+= " ------- " + name + " -------\n";
int patternCount = 0;
int levelCount = 0;
for (List<ItemsetApriori> level : levels) {
retour+= " L" + levelCount + " \n";
for (ItemsetApriori itemset : level) {
retour+= " pattern " + patternCount + ": ";
itemset.print();
retour+= "support : "
+ itemset.getSupportRelatifFormatted(nbObject);
patternCount++;
String closed = itemset.isClose() ? "closed" : "";
retour+= " (" + itemset.getAbsoluteSupport() + "/"
+ nbObject + ") " + closed+ "\n";
if (itemset.isPseudoclose()) {
retour+= "pseudo-closed, closure: \n";
itemset.getClosure().print();
retour+= " ("
+ itemset.getClosure().getAbsoluteSupport() + "/"
+ nbObject + ")";
}
retour+= "";
}
levelCount++;
}
retour+= " --------------------------------\n";
return retour ;
}
AFFICHAGE:
------- FREQUENT ITEMSETS -------
L0
pattern 0: support : 1 (8/8)
L1
pattern 1: support : 0,75 (6/8)
pattern 2: support : 0,62 (5/8)
pattern 3: support : 0,62 (5/8)
pattern 4: support : 0,62 (5/8)
--------------------------------
Après pattern 1, il devrait y avoir : 1, Itemset.print() n'affiche que dans la console et qu'une seule fois !
J'ai beau voir et revoir ce code je ne comprends pas! j'utilise Netbeans 7.1.2 merci d avance :)
A voir également:
- Java void
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
1 réponse
1) Tu ne peux pas avoir deux méthodes de même nom avec les même arguments
2) Lorsque l'on utilise beaucoup de concaténations de String, on utilise un StringBuilder
3) nbObject est certainement être un paramètre inutile, tu dois pouvoir le calculer, ta méthode qui renvoie un String serait alors toString()
4) On ne fait jamais des méthodes "print", ça ne sert à rien !
Remarque : j'ai mis toString() là où il y avait print(), il ne faudra pas oublier d'adapter le code en conséquence.
2) Lorsque l'on utilise beaucoup de concaténations de String, on utilise un StringBuilder
3) nbObject est certainement être un paramètre inutile, tu dois pouvoir le calculer, ta méthode qui renvoie un String serait alors toString()
4) On ne fait jamais des méthodes "print", ça ne sert à rien !
@Deprecated
public void printItemsets()
{
System.out.print(this);
}
@Override
public String toString()
{
int nbObject = getNbObject();
int patternCount = 0;
int levelCount = 0;
StringBuilder sb = new StringBuilder("-------- ").append(name).append(" --------");
int n=sb.length();
sb.append(endl);
for (List<ItemsetApriori> level : levels)
{
sb.append("L").append(levelCount).append(endl);
for (ItemsetApriori itemset : level)
{
sb.append("pattern ").append(patternCount++).append(": ").append(itemset.toString())
.append(" support: ").append(itemset.getSupportRelatifFormatted(nbObject))
.append(" (");
if (itemset.isClose())
sb.append("closed");
else
sb.append(itemset.getAbsoluteSupport()).append("/").append(nbObject);
sb.append(")").append(endl);
if (itemset.isPseudoclose())
{
sb.append("pseudo-closed, closure: ").append(itemset.getClosure().toString())
.append(" (").append(itemset.getClosure().getAbsoluteSupport()).append("/")
.append(nbObject).append(")").append(endl);
}
}
levelCount++;
}
for (int i=0; i<n; i++)
sb.append('-');
sb.append(endl);
return sb.toString();
}
Remarque : j'ai mis toString() là où il y avait print(), il ne faudra pas oublier d'adapter le code en conséquence.
Moon Yagami
Messages postés
17
Statut
Membre
merci, mais il ne s'agit pas de 2 méthodes avec les memes nom et parametres, j'ai remplacé l'une par l'autre ;) merci pr le StringBuilder jvais voir
KX
Messages postés
19031
Statut
Modérateur
3 020
C'est parce que je me suis basé sur la deuxième méthode pour faire cette troisième, sachant que de toute façon je n'ai pas pu tester puisqu'il me manque le code des autres classes, et en particulier à la méthode "print" que tu utilises dans ItemsetApriori, et qui est à mon avis cause de l'erreur...
Moon Yagami
Messages postés
17
Statut
Membre
j'ai essayé , c la meme chose avec StringBuilder
KX
Messages postés
19031
Statut
Modérateur
3 020
Explique mieux ce que c'est ta question alors, parce que pour passer "de void" (tout avec println) en String, c'est bien comme ça que tu dois faire, mais en t'assurant qu'il n'y ai plus de println nul part, et en particulier remplacer la méthode print de ItemsetApriori par une méthode qui renvoie un String...
Moon Yagami
Messages postés
17
Statut
Membre
c'est bon, en ayant modifié print() ça a marché, merci bcp tu m'as sauvé d'une depression :)