2013-06-14 4 views
0

Je suis en train d'imprimer ce EnumImpression Sur un menu Enum

private enum Menu 
     { 
      Insert("Insert"), 
      Search("Search"), 
      Size("Size"), 
      Height("Height"), 
      Clear("Clear"), 
      Inorder("Inorder"), 
      Preorder("Preorder"); 

      private String description; 

      Menu() 
      { 
       this.description = this.name(); 
      } 

      Menu(String name) 
      { 
       this.description = description; 
      } 

      public String toString() 
      { 
       return description; 
      } 
     } 

En utilisant ceci:

  Menu[] menu = Menu.values(); 
      for(Menu m: menu) 
      { 
       System.out.printf("%d) %s%n", m.ordinal() + 1, m); 
      } 

Mes résultats sont les suivants:

Choose an option to complete 
1) null 
2) null 
3) null 
4) null 
5) null 
6) null 
7) null 

Comment serais-je capable de résoudre ce problème? C'est la première fois que j'utilise des énumérations et j'ai du mal à comprendre pourquoi je comprends cela.

Répondre

4

Fondamentalement, vous assiging la valeur de description (qui est null) se ...

changement

Menu(String name) { 
    this.description = description; 
} 

Pour

Menu(String name) { 
    this.description = name; 
} 
+0

Je savais que ce serait quelque chose de stupide! Merci beaucoup Je l'apprécie vraiment –

+0

@RandomGarbage Bienvenue dans la forêt, attention aux arbres;) – MadProgrammer

2

Voici est probablement ce que vous voulez (et vous n'avez pas besoin du constructeur arg) -

Menu(String d) { 
    this.description = d; 
} 

Sinon, le toString() renvoie par défaut le nom dans le cas d'enums.

0

, plus

  • retirer le constructeur vide, il n'y a jamais appelé.
  • n'utilisez pas toString() à cette fin, car si vous voulez le changer plus tard, il sera difficile de savoir où il est utilisé. nous utilisons toString uniquement pour la sortie de débogage ou les messages d'erreur.
0

Cela fonctionne

Menu[] menu = Menu.values(); 
    for(Menu m: menu) 
    { 
     System.out.printf("%d) %s%n", m.ordinal() + 1, m.name()); 
    }