Diskuze: Zásobník
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 7 zpráv z 7.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Problém je v tom že objekt z2 vytváraš ešte predtým než si do z1 vložil znaky, tzn. že v konštruktore TridaProZasobnik sa skopíruje prázdne pole zo z1 do z2. Taktiež indexvyzvedni bude stále 0 pretože ho v konštruktore nenastavuješ.
Ahoj, toto chování je správné. Problém je v tom, že Ty nejdříve vytvoříš zásobník z2 ze z1, který je prázdný (definuješ jenom velikost) a až potom naplňuješ zásobník z1. Takže když vypisuješ druhý zásobník, dostaneš samé nuly.
Tak jsem tu třídu s hlavní metodou upravil na:
public class Zasobnik {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
TridaProZasobnik z1= new TridaProZasobnik(5);
char[] pole={'a','D','T'};
TridaProZasobnik z3= new TridaProZasobnik(pole);
for(int i=0;i<7;i++){
z1.vloz((char)('a'+i));
}
TridaProZasobnik z2= new TridaProZasobnik(z1);
for(int i=0;i<7;i++){
System.out.println(z2.vyjmi());
}
}
}
Teď by se měli do zásobníku z1 vložit prvky a až e. Následně by se měli zobrazit, ale místo toho se zobrazují zase jen nuly . Nevíte co s tím je teď? (už jsem dal deklaraci zásobníku z2 za vložení prvků do z1; na přiloženém obrázku je vyfocený výstup)
Už som to tu spomínal že indexvyzvedni z2 bude 0 pretože nebol nastavený. Dobré by bolo pridať do konštruktora TridaProZasobnik niečo takéto
indexvyzvedni = a.indexvyzvedni;
indexvloz = a.indexvloz;
TridaProZasobnik (TridaProZasobnik a){
zasobnik=new char[a.zasobnik.length];
for(int i=0;i<a.zasobnik.length;i++){
zasobnik[i]=a.zasobnik[i];
}
indexvloz = a.indexvloz;
indexvyzvedni = a.indexvyzvedni;
}
Btw, u zasobníku je zbytečné si držet 2 indexy, když stejně vždycky můžeš pracovat jen s jedním.
Zobrazeno 7 zpráv z 7.