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

Problem z wypisaniem stosu

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
379 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,260 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,260 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 616 wizyt
pytanie zadane 2 listopada 2016 w Java przez Patryk Rafał Bywalec (2,700 p.)
0 głosów
2 odpowiedzi 890 wizyt
pytanie zadane 30 października 2016 w Java przez Patryk Rafał Bywalec (2,700 p.)
0 głosów
1 odpowiedź 747 wizyt

93,176 zapytań

142,185 odpowiedzi

321,980 komentarzy

62,506 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 1637p. - dia-Chann
  2. 1614p. - Łukasz Piwowar
  3. 1599p. - CC PL
  4. 1597p. - Łukasz Eckert
  5. 1537p. - Łukasz Siedlecki
  6. 1531p. - rucin93
  7. 1356p. - ssynowiec
  8. 1351p. - Tomasz Bielak
  9. 1328p. - Michal Drewniak
  10. 1288p. - rafalszastok
  11. 1273p. - Adrian Wieprzkowicz
  12. 1232p. - Mikbac
  13. 1169p. - Grzegorz Aleksander Klementowski
  14. 1155p. - Piotr Aleksandrowicz
  15. 1149p. - Michał Telesz
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...