Volání metody v jiné třídě binárního stromu – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Volání metody v jiné třídě binárního stromu – Java – Fórum – Programujte.comVolání metody v jiné třídě binárního stromu – Java – Fórum – Programujte.com

 

Vlákno bylo úspěšně vloženo.
Pokud sám přijdeš na řešení, nezapomeň ho sem přidat!
Marek Musil
~ Anonymní uživatel
3 příspěvky
29. 5. 2015   #1
-
0
-

Dobrý den,

potřeboval bych poradit ohledně mého projektu na binární strom. Mám vytvořenou třídu Start, ve které je naprogramováno textové rozhraní a třídu Strom, která přidává prvky do stromu, odebírá, hledá hodnotu a vypisuje celý strom. Když chci spustit metodu (např. na vypsání stromu) ze třídy Start musím napsat: 

Strom str = new Strom();

System.out.println("Strom obsahuje:");

str.vypisStromu();

Bohužel se asi vytvoří zcela nový prázdný strom a nic nevypíše. Pokud už je strom hodnotami naplnění potřeboval bych, aby se metoda z jiné třídy volala a použila data z již vytvořeného stromu.

Předem děkuji za odpověď.

Marek Musil

Nahlásit jako SPAM
IP: 178.255.174.–
Kit+15
Guru
29. 5. 2015   #2
-
0
-

#1 Marek Musil
Však ten strom je prázdný. Co by se mělo vypisovat?

Pro výpis stromu bych použil jednodušší zápis:

System.out.println(str);

A samozřejmě doporučuji proměnnou "str" přejmenovat na "strom".

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Marek Musil
~ Anonymní uživatel
3 příspěvky
29. 5. 2015   #3
-
0
-

#2 Kit
Asi jsem to špatně vysvětlil. Když vytvořím strom přidáváním prvků

Připojen obrázek.

a poté dám vypisStromu() vše se vypíše. To samé ale potřebuji aby fungovalo ne pomocí klikání myší, ale pomocí textového rozhraní.

Připojen obrázek.

public void spustit()
    {
        int volba = -1;
        do{
            menu();
                                
            try{
                volba = scan.nextInt();
            }
            catch(Exception e){
                // vybere z klavesnice znak NL
                scan.nextLine();
            }

            switch (volba) {
                case 1:  prvni(); break;
                case 2:  druhy(); break;
                case 3:  treti(); break;
                case 4:  ctvrty(); break;
                case 5:  paty(); break;
            }
            
        } while(volba != 0);
        konec();
    }
private static void treti()
    {
        Strom str = new Strom();
        System.out.println("Strom obsahuje:");
        str.vypisStromu();
    }

Tento kód je špatně a potřebuji aby se po vytvoření hodnot spustila metoda v jiné třídě a udělala to co má.

public void vypisStromu()
    {
        vypisStromuDva(koren);
    }
    
    private void vypisStromuDva(Prvek oznaceny)
    {
        if(oznaceny == null) // výpis rodič, levý, pravý
        {
            return;
        }
        System.out.println(oznaceny.getHodnota());
        vypisStromuDva(oznaceny.getLevy());
        vypisStromuDva(oznaceny.getPravy());
    }
Nahlásit jako SPAM
IP: 178.255.174.–
JirkaEr0
Newbie
30. 5. 2015   #4
-
0
-

#3 Marek Musil
Ahoj.

Problém bych viděl v tom, že v metodě treti() vytváříš nový strom (který samozřejmě bude prázdný, protože jsi ho teď vytvořit a vytváříš vždy nový opakovaným voláním této metody).

Má rada zní, vytvoř si jeden strom pro běh celého programu. Tedy vytvoř si jedinou instanci třídy Strom pro třídu Start. Vytvoř si proměnou private Strom strom a v konstruktoru vytvořit instanci, viz následující kus kódu. 

public Start {
	private Strom strom;

	# Konstruktor
	public Start() {
		strom = new Strom();
	}
	.
	.
	.
}

Nyní v metodě jako je treti() už nevytvářej novou instanci třídy Strom, ale pracuj s právě vytvořenou proměnnou. (Proměnná je private, a tudíž se na ní dostaneš právě v rámci celé třídy.

Pokud bys chtěl v běhu svého programu "vyčistit" strom, nebo jinak řečeno vytvořit novou instanci, stačí přidat například šestou volbu s metodou sest() a v ní prostě k aktuální proměnné strom přiřadit novou instanci (nový strom).

public void sest() {
	strom = new Strom();
}
Nahlásit jako SPAM
IP: 78.157.131.–
Marek Musil
~ Anonymní uživatel
3 příspěvky
30. 5. 2015   #5
-
0
-

#4 JirkaEr
Děkuji, to je přesně co jsem potřeboval. Včera večer mě to také napadlo a když jsem dnes viděl váš příspěvek a vyzkoušel fungovalo to. Myslel jsem, že je potřeba při každém volání psát new Strom, ale teď už chápu co to vlastně znamená a proč je logické použít to jen jednou.

Děkuji.

Nahlásit jako SPAM
IP: 178.255.174.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 12 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý