Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: existpierre 17 Dubna 2009, 11:31:06

Název: Chyba v knihe vyukoveho kurzu Java! [vyriesene]
Přispěvatel: existpierre 17 Dubna 2009, 11:31:06
Zdravim, zacal som sa ucit Javu, no a v knihe som narazil na problem. Preberam akurat vnorene triedy.. Lenze ked zadam napriklad "trieda." ...ma sa zobrazit zoznam premennych, metod atd.. no ale tam ta vnorena trieda nie je. Vnorena trieda je private, no proste jej nadradena trieda ju akoby nevidela.. mam v tom dost nejasnosti..dokonca aj original kod z CD, aj na nom mi vypisuje chybovu hlasku..

"Cannot find symbol" je v mojom kode ..ked ukazem na Priebeh(to mam v oboch pripadoch cervenym podciarknute):

Kód: [Vybrat]
        Priebeh iterator = zasobnikJedna.Priebeh();

        while(!iterator.jePosledny()) {
            System.out.print(iterator.aktualny() + "");
            interator.Inkrementovat;
        }



Exporting non-public type through public API na CD ... toto ked ukzem mysou na kod :
Kód: [Vybrat]
  public Prubeh prubeh() {
    return new Prubeh();
  }

tu je kod:

Main.class:

Kód: [Vybrat]
package vnorenatrieda;

/**
 *
 * @author peter
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int velkost = 15;
        ZasobnikInt zasobnikJedna = new ZasobnikInt(velkost);

        for (int j=0; j<velkost; j++){
            zasobnikJedna.Vlozit(2*j);
        }
       
        Priebeh iterator = zasobnikJedna.Priebeh();

        while(!iterator.jePosledny()) {
            System.out.print(iterator.aktualny() + "");
            interator.Inkrementovat;
        }
System.out.println();

    }

}


ZasobnikInt:

Kód: [Vybrat]
package vnorenatrieda;

/**
 *
 * @author peter
 */
public class ZasobnikInt {
    private int[] zasobnik;
    private int dalsi = 0;

    public ZasobnikInt(int kapacita) {
        zasobnik = new int[kapacita];
    }

    public void Vlozit(int na) {
        if (dalsi < zasobnik.length)
            zasobnik[dalsi++] = na;
    }

    public boolean jePrazdny() {
        return (dalsi == 0);
    }

    public int Vynat() {
        if (!jePrazdny())
            return zasobnik[--dalsi];
        else
            return 0;
    }

    public int GetVelkostZasobnika() {
        return dalsi;
    }

    private class Priebeh {
       private int i = 0;

       public void Inkrementovat() {
           if (i < zasobnik.length)
               i++;
       }

       public int Aktualny() {
           return zasobnik[i];
       }

       public boolean jePosledny() {
           if (i == GetVelkostZasobnika() - 1)
               return true;
           else
               return false;
       }

       public Priebeh xPriebeh() {
           return new Priebeh();
       }
       



    }

}



Kniha je stavana pre program netbeans, v tom to aj robim
Název: Re: Chyba v knihe vyukoveho kurzu Java!
Přispěvatel: petergula 17 Dubna 2009, 12:31:31
zeby chybne forum? Co tak skusit nejake forum o jave. Nejak mi nejde do hlavy co to ma s linuxom/ubuntu spolocne.
Ale k problemu:
- skuste si precitat java konvenciu pre pisanie kodu, velke pismena na nazov method sa nepouzivaju, nie ze by to bolo neprekompilovatelne, ale strasne zle sa to cita.
- co ste chcel dosiahnut touto konstrukciou?
Citace
interator.Inkrementovat;
Toto predsa java nemoze prelozit, alebo sa mylim?
- ...

Myslim, ze by ste mal zacat odznovu a najprv si osvojit zaklady javy az potom sa pustat do zlozitejsich konstrukcii typu pouzitie vnorenej triedy ...
Inak, ak tieto zdrojaky mate z knihy, radil by som knihu vymenit za inu, jednoduchsiu a pre Vas urcite lepsiu.
Název: Re: Chyba v knihe vyukoveho kurzu Java!
Přispěvatel: existpierre 17 Dubna 2009, 13:06:33
konvenciu pouzivam taku, aku mam zauzivanu z C++ a viac menej sedi aj tu.. ano ta kniha sa mi zda divna, ale uz ju mam, zaplatil som si ju tak chcem sa aspon pokusit v nej pokracovat... otazka ale nezostala zodpovedana. ... preco nefunguje vnorena trieda?
Název: Re: Chyba v knihe vyukoveho kurzu Java!
Přispěvatel: petergula 17 Dubna 2009, 13:16:25
je tazke odpovedat na Vasu otazku, zo zdrojaku nie je jasne co chcete dosiahnut. Teda aspon pre mna je to zmet kodu ktoremu nerozumie ani autor.
Tu je napriklad pouzitie inner class: http://java.sun.com/docs/books/tutorial/java/javaOO/innerclasses.html (http://java.sun.com/docs/books/tutorial/java/javaOO/innerclasses.html)

A zakladny problem, preco Vam to nejde je slovicko private definujuce viditelnost triedy. Proste je odvonku neviditelna. Vo Vasej triede ju samozrejme mozete pouzivat, napr. ako v mojom prilinkovanom example:

Kód: [Vybrat]
InnerEvenIterator iterator = this.new InnerEvenIterator(); v triede DataStructure.


Celkom slusna kniha na zaciatok o Jave: http://www.linuxzone.cz/index.phtml?ids=33&idc=504 (http://www.linuxzone.cz/index.phtml?ids=33&idc=504)
Jednoduche example na nete: http://www.exampledepot.com/

a hlavne javadoc a http://java.sun.com (http://java.sun.com).

popripade Google: http://www.google.sk/search?q=java+inner+class+example&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a (http://www.google.sk/search?q=java+inner+class+example&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a)
Název: Re: Chyba v knihe vyukoveho kurzu Java!
Přispěvatel: Marek_ 17 Dubna 2009, 13:21:44
V Javě jsou konvence důležité a krásné, jestli chceš umět Javu, musíš se naučit i její konvence!
Navíc se to blbě po tobě luští. Chybu už ti prozradili v předchozím příspěvku.
Název: Re: Chyba v knihe vyukoveho kurzu Java!
Přispěvatel: existpierre 18 Dubna 2009, 18:12:01
Dakujem, aj mne sa to zdalo divne, ze preco to tak je, ze ta trieda nemoze vidiet,... len sa mi nezdalo to, ze preco je to tak aj v knihe, tak som si myslel ze je chyba u mna a nakoniec je to tou knihou... to ma trosku sklamalo. To z examplu na nete uz funguje dik