• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z wypisaniem stosu

Object Storage Arubacloud
0 głosów
296 wizyt
pytanie zadane 10 listopada 2016 w Java przez Patryk Rafał Bywalec (2,700 p.)
Witam mam problem z wypisywaniem stosu mianowicie pętla wypisuje cały czas ostatni element podpowie ktoś co jest nie tak

public class Stos implements IStos{
    
    private Element top = new Element();
    @Override
    public void push(int i) {
        
        top.dane = i;
        top.next = top;
    }


    @Override
    public void print() {
        top = top.next;
        while(top.next != null)
        {
            
            System.out.println(top.dane);
            top = top.next;
        }
    }


    
}

klasa element 

public class Element {
    
     public int dane; // wyjątkowo, dla uproszczenia, pola publiczne
     public Element next; // referencja do następnego elementu stosu
    
}

 

2 odpowiedzi

0 głosów
odpowiedź 10 listopada 2016 przez ribeiro Stary wyjadacz (11,440 p.)
    public void push(int i) {
        top.dane = i;
        top.next = top;
    }
 

Załóżmy że dodajesz na początku push(1), wtedy top.dane = 1 oraz top.next.dane = null. Następnie dodajesz push(2). Wtedy top.dane = 2 oraz top.next.dane = top.dane = 2. A więc za każdym razem jak coś dodajesz to nadpisujesz dane poprzedniego elementu. 

    public void push(int i) {
        Element old = top;
        top.dane = i;
        top.next = old;
    }

 

komentarz 10 listopada 2016 przez Patryk Rafał Bywalec (2,700 p.)

faktycznie rozumiem, ale dalej wypisuje tylko ostatnią 

 @Override
    public void print() {
       
      while(top.next != null)
      {
          System.out.println(top.dane);
          top = top.next;
      }
    }

 

komentarz 10 listopada 2016 przez ribeiro Stary wyjadacz (11,440 p.)
Może tam musi być Element old = new Element(); old.dane = top.dane; old.next = top.next. Inaczej chyba java zmieni także old, ponieważ w przykładzie z mojej pierwszej odpowiedzi wskazuje on na tę samą instancję Element:)
komentarz 10 listopada 2016 przez Patryk Rafał Bywalec (2,700 p.)

Kolego dalej ten sam problem pokazuje mi ostatnią liczbę 

 @Override
    public void print() {
       Element old = new Element();
       old.next = top.next;
       while(old.next != null)
       {
           
           System.out.println(old.dane);
           old.dane = top.dane;
           
       }
    }

 

0 głosów
odpowiedź 10 listopada 2016 przez mbabane Szeryf (79,280 p.)

zle dodajesz dane na stos

top.next = top to samo, czyli ze nextem jest top, a co jest topem aktualnie?

zobacz w tym temacie jak to zrobilem:

http://forum.pasja-informatyki.pl/191637/implementacja-stos-pytanie#a191644

komentarz 10 listopada 2016 przez Patryk Rafał Bywalec (2,700 p.)
nie wiem czy źle jak ostanią wypisuje mi poprawnie, problem jest jak wszystkie chce wypisać
komentarz 10 listopada 2016 przez Patryk Rafał Bywalec (2,700 p.)

działa wystarczyło stworzyć konstuktor

package stos2;

/**
 *
 * @author Patryk
 */
public class Element {
    
     public int dane; // wyjątkowo, dla uproszczenia, pola publiczne
     public Element next; // referencja do następnego elementu stosu

     public Element(int dane,Element next)
     {
         this.dane = dane;
         this.next = next;
     }
}

public class Stos implements IStos{
    
    private Element top;
    
    public Stos()
    {
        this.top = null;
    }
 
    public void push(int i) {
        top = new Element(i,top);
        
    }

    @Override
    public int pop() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public int peek() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public boolean isEmpty() {
        if(this.top == null) return true;
        return false;
    }

    @Override
    public void print() {
       if(this.isEmpty() == false)
       {
           Element pom = top;
           while(pom != null)
           {
               System.out.println(pom.dane);
               pom = pom.next;
           }
       }
    }

    @Override
    public void clear() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    
}

 

komentarz 10 listopada 2016 przez mbabane Szeryf (79,280 p.)
Przepraszam ze tak zwroce uwage, ale ile Ty juz cisniesz ten stos to juz Twoj 3 temat i jeszcze nie ogarniasz tego?

http://forum.pasja-informatyki.pl/192060/java-palindromy-przy-uzyciu-stosu#c192225

http://forum.pasja-informatyki.pl/191637/implementacja-stos-pytanie#c191647
komentarz 10 listopada 2016 przez Patryk Rafał Bywalec (2,700 p.)
kolego kto pyta nie błądzi
komentarz 10 listopada 2016 przez Patryk Rafał Bywalec (2,700 p.)
a co do tego tematu to pytałem do nie dostałem satysfakcjonującej mnie odpowiedzi

Podobne pytania

0 głosów
0 odpowiedzi 585 wizyt
pytanie zadane 2 listopada 2016 w Java przez Patryk Rafał Bywalec (2,700 p.)
0 głosów
2 odpowiedzi 781 wizyt
pytanie zadane 30 października 2016 w Java przez Patryk Rafał Bywalec (2,700 p.)
0 głosów
1 odpowiedź 401 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...