"Wejście" do grupy

0

Witam,
Mam następujący problem... Mój program posiada grupę główną. W niej mogą być tworzone kolejne grupy, a w nich kolejne itd. Problem polega na tym, że po stworzeniu grup w grupie głównej, mogę dostać się tylko do grupy, którą stworzyłem jako ostatnią. Nie mogę wychwycić błędu dlatego proszę o pomoc. Oto kod:

Klasa grupa:

public class Grupa {
    private String name = " ";
    private TreeMap <String, Object> podgrupa = new TreeMap <String, Object> ();

    public TreeMap<String, Object> getPodgrupa() {
        return podgrupa;
    }

    public void setPodgrupa(TreeMap<String, Object> podgrupa) {
        this.podgrupa = podgrupa;
    }

    public String getGrupa() {
        return name;
    }

    public void setGrupa(String Grupa) {
        this.name = Grupa;
    }
}

I w mainie mam taką pętle:

        TreeMap <String, Object> aktualna = new TreeMap <String, Object>();
        Grupa kontakty = new Grupa();
        Grupa nowa = new Grupa();
        Grupa temporary = null;
        aktualna = kontakty.getPodgrupa();
do{ 

           BufferedReader komenda = new BufferedReader(new InputStreamReader(System.in));
            
            int i = 0;

            String input = komenda.readLine();
            String odstep = " ";
            String klucz = null, zrodlo = null;
            String[] temp;
            temp = input.split(odstep);
            for(i=0; i<temp.length; i++)
            {
                if(i == 0)
                {
                    klucz = temp[i];
                }
                else
                {
                    zrodlo = temp[i];
                }
            }

            if((klucz.equals("cd")) && (zrodlo != null)) // wchodzenie do danej grupy
            {
                     temporary = (Grupa) aktualna.get(zrodlo);
                     if(temporary != null)
                     {
                        System.out.println(zrodlo + " "  + temporary);
                        aktualna = temporary.getPodgrupa();
                     }
             }
            else if((klucz.equals("mkgrupa")) && (zrodlo != null)) // tworzenie grupy 
            {
                nowa.setGrupa(zrodlo);
                aktualna.put(zrodlo, nowa);
            }
}
while(true);
0

To zapamiętuj roota całej hierarchizacji, tak widział bym implementację

class Grupa {

    private String name;
    private final TreeMap<String, Grupa> podgrupa = new TreeMap<String, Grupa>();

    public Grupa(String name) {
        this.name = name;
    }

    public Grupa getPodgrupa(String name) {
        return podgrupa.get(name);
    }

    public void addPodgrupa(Grupa podgrupa) {
        this.podgrupa.put(podgrupa.getName(), podgrupa);
    }

    public String getName() {
        return name;
    }

    public void setName(String Grupa) {
        this.name = Grupa;
    }
}

public class Kontakty {

    public static void main(String[] args) throws IOException {
        Grupa root = new Grupa("Root");
        Grupa current = root;
        BufferedReader komenda = new BufferedReader(new InputStreamReader(System.in));
        do {

            System.out.println(current.getName() + ">");

            int i = 0;

            String input = komenda.readLine();
            String odstep = " ";
            String klucz = null, zrodlo = null;
            String[] temp;
            temp = input.split(odstep);
            for (i = 0; i < temp.length; i++) {
                if (i == 0) {
                    klucz = temp[i];
                } else {
                    zrodlo = temp[i];
                }
            }

            if ((klucz.equals("cd")) && (zrodlo != null)) {
                if ("/".equals(zrodlo)) {
                    current = root;
                } else {
                    // wchodzenie do danej grupy
                    Grupa g = current.getPodgrupa(zrodlo);
                    if (g != null) {
                        current = g;
                    } else {
                        System.out.println("Nie znaleziono " + zrodlo);
                    }
                }
            } else if ((klucz.equals("mkgrupa")) && (zrodlo != null)) {
                // wchodzenie do danej grupy
                current.addPodgrupa(new Grupa(zrodlo));
            }
        } while (true);
    }
}
0

Dzięki wielkie...
A powiedz mi jak możesz... jak zapamiętać całą ścieżkę? tzn. jakbym tworzył coś takiego:
kontakty/podgrupa1/pogdrupa2/...
Pewnie przy każdym wywołaniu wpisaniu "cd nazwa_podgrupy" musiałbym zapamiętywać "nadgrupę" w zmiennej tak?

0
Carter napisał(a)

Dzięki wielkie...
A powiedz mi jak możesz... jak zapamiętać całą ścieżkę? tzn. jakbym tworzył coś takiego:
kontakty/podgrupa1/pogdrupa2/...
Pewnie przy każdym wywołaniu wpisaniu "cd nazwa_podgrupy" musiałbym zapamiętywać "nadgrupę" w zmiennej tak?

Nie za bardzo rozumiem o co pytasz.

Jeżeli chcesz mieć możliwość powrotu do grupy nadrzędnej (nadgrupy), to do klasy Grupa dodaj pole grupaNadrzedna i uzupełniaj je w metodzie addPodgrupa.
Będziesz mógł wykonać operację "cd .." oraz wyświetlić pełną ścieżkę.

0

Dzięki, działa.

Może mi ktoś powiedzieć, czemu wczytywanie z pliku mi nie działa? Bo zapis jest ok (EDIT: zapis w sensie zapis do pliku, bo plik zawiera dane)

else if((klucz.equals("write")) && (zrodlo != null))
            {
                try
                {
                    BufferedOutputStream out = new BufferedOutputStream(
                                          new FileOutputStream(zrodlo));
                    ObjectOutputStream objekt = new ObjectOutputStream(out);
                    objekt.writeObject(root);
                    objekt.flush();
                    objekt.close();
                    out.close();
                }
                catch(Exception e)
                {
                    System.out.println("Blad podczas serializacji: " + e);
                }
            }
            else if((klucz.equals("read")) && (zrodlo != null))
            {
                try {
                BufferedInputStream in = new BufferedInputStream(
                                    new FileInputStream(zrodlo));
                ObjectInputStream objekt = new ObjectInputStream(in);
                root = null;
                root = (Grupa) objekt.readObject();
                //objekt.close();
                in.close();
                }
                catch(Exception e)
                {
                    System.err.println("Blad podczas deserializacji: " + e);
                }
            }
0

Sprawdź, czy taka sekwencja poleceń działa.

read <nawa_pliku>
cd /

0

Heh... zapomniałem ustawić, że aktualna lista po wczytaniu to root, dzięki ;)
Jakby ktoś chciał to mogę udostępnić kod, który ma wyszukiwanie, dodawanie, usuwanie, edytowanie, wyswietlanie, zapis, odczyt i przemieszczanie sie po podgrupach i kontaktach.
Jeszcze raz dziękuje za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1