2016-04-14 3 views
0

Ich habe eine ziemlich einfache Frage. Ich brauche nur die Logik oder den Code. Ich werde sehr dankbar sein.Java-Display-Liste von 2D-Array durch Gruppierung?

Angenommen, ich habe einen 2D-Array wie folgt:

[ 
['Main Menu', 'User Menu', 'Account', 'Enquiries', 'Query by Name'], 
['Main Menu', 'User Menu', 'Account', 'Enquiries', 'Query by ID'], 
['Main Menu', 'User Menu', 'Account', 'Create', 'Create Type'], 
['Main Menu', 'User Menu', 'Account', 'Create', 'Create Account'], 
['Main Menu', 'User Menu', 'Client', 'Enquiries', 'Query by Client Name'], 
['Main Menu', 'User Menu', 'Client', 'Create', 'Create Client'] 
] 

ich das Programm will wie diese

Main Menu 
-User Menu 
--Account 
---Enquiries 
----Query by Name 
----Query by ID 

Main Menu 
-User Menu 
--Account 
---Create 
----Create Type 
----Create Account 

Main Menu 
-User Menu 
--Client 
---Enquiries 
----Query by Client Name 

Main Menu 
-User Menu 
--Client 
---Create 
----Create Client 

Durch die Art und Weise angezeigt werden, wenn es eine andere Möglichkeit ist, Daten zu speichern, die nicht mit 2D-Arrays, mit denen das obige Display einfacher zu codieren wäre, können Sie erwähnen.

+0

Erstellen Sie eine Klasse 'Menu' mit einer Variablen' Menu parentMenu'. Mit diesem können Sie leicht einen repräsentativen Baum eines Menüs erstellen. Das wäre ein eher OOP-orientierter Ansatz für das Problem. – SomeJavaGuy

Antwort

3

Sie können eine Klasse Menu wie unten gezeigt erstellen:

class Menu{ 
    private String name;   // menu name 
    private List<Menu> subMenu; // list of sub menus 
    // getter and setter 

    // recursive method for displaying menus in desired format 
    public String displayString(String prefix) { 
     StringBuilder builder = new StringBuilder(); 
     if(subMenu != null){ 
      for (Menu menu : subMenu) { 
       builder.append(menu.displayString(prefix + " ")); 
      } 
     } 

     return prefix + name + "\n" + builder.toString(); 
    } 
} 

diese Struktur können Sie ganz einfach Ihre Daten speichern und wie Sie wollen drucken.

+0

Es könnte besser sein, eine 'Map' anstelle von' List' zu verwenden! – flakes

+0

Ja, aber wenn ich Tausende von unterschiedlichen Aufzeichnungen habe, wäre der Setter für jeden anders. Eine Logik, die eine Art von Sortierung beinhaltet, wäre am besten, um die erforderliche Anzeige zu erreichen. Es tut mir leid, wenn ich falsch liege. Ich bin ziemlich neu im Programmieren. – user2228135

+0

Was meinst du, dass "Setter für jeden anders wäre"? Möchten Sie Menüs auf der Grundlage des Attributs 'name' auf derselben Ebene sortieren? –

0

Wenn Sie das gezackte Array-Design in Ihrer Frage zu verwenden, die ich persönlich habe kein Problem mit (vielen Möglichkeiten, alle Katzen, um die Haut) habe, verwenden Sie einfach einen inneren for-Schleife Ansatz:

for (String[] menuList : menuArray) { 
    for (int i = 0; i < menuList.length; i++) { 
     //print out values 
    } 
} 

Auch wenn Sie den Code der Kürze halber einfach geschrieben haben, beachten Sie, dass Ihre 2D-Array-Syntax nicht kompiliert werden würde.

Verwandte Themen