Estrutura de dados, PILHA. Na saída do console, a primeira e segunda pizzas não estão sendo impressas

package tad;

/**
 *
 * @author Davi #
 */
public class Stack {

    String elementos[];
    int topo;

    public Stack() {
        elementos = new String[20];
        topo = -1; //posicao invalida do vetor;
    }

    public void push(String e) {
        if (isFull()) {
            throw new RuntimeException("Pilha cheia");
        }
        topo++;
        elementos[topo] = e;
    }

    public String pop() {
        if (isEmpty()) {
            throw new RuntimeException("Pilha vazia");
        }
        String e;
        e = elementos[topo];
        topo--;
        return e;
    }

    public boolean isFull() {
        return (topo == 9);
    }

    public String top() {
        if (isEmpty()) {
            throw new RuntimeException("Pilha vazia");
        }
        return elementos[topo];
    }

    public boolean isEmpty() {
        return topo == 1;
    }

}
package app;

import tad.Stack;

public class AppStack {
	
	public static void main(String[] args) {
		Stack p = new Stack();
		System.out.println("Entregas da PIZZARIA UAM.");
		System.out.println("");   
		
		p.push("Primeira entrega: Portuguesa ");
		p.push("Segunda entrega: Frango com catupiry ");
		p.push("Terceira entrega: Calabresa ");
		p.push("Quarta entrega: Quatro queijos ");
		p.push("Quinta entrega: Peperoni ");
		p.push("Sexta entrega: Marguerita");
		p.push("Setima entrega: Brócilis");
		p.push("Oitava entrega: Napolitano");
		p.push("Nona entrega: Banana");
		p.push("Decima entrega: maca");
		
		while (p.isEmpty() == false) {
			System.out.println(p.pop());
		}
	}
}

Ih rapaiz, faltou o erro.

1 curtida

run:

Entregas da PIZZARIA UAM.

Decima entrega: maca
Nona entrega: Banana
Oitava entrega: Napolitano
Setima entrega: Brócilis
Sexta entrega: Marguerita
Quinta entrega: Peperoni
Quarta entrega: Quatro queijos
Terceira entrega: Calabresa

CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

===========================
Erro: a primeira e segunda não estão sendo impressas na saida.

Nâo deveria ser topo == -1 ?

Sim
kkkkkkkk

valeu!!!

Lucas, como fica essa pilha dinâmica?

Veja (montei aqui agora, talvez dê para melhorar):

public class Main {

	public static void main(String[] args) throws Exception {
		Stack stack = new Stack();
		
		stack.push("A");
		stack.push("B");
		stack.push("C");
		stack.push("D");
		stack.push("E");
		
		while (stack.isEmpty() == false) {
			System.out.println(stack.pop());
		}
	}

	private static class Stack {
		private Item topo;
		
		public void push(String valor) {
			if (topo == null) {
				topo = new Item(valor, null);
			} else {
				topo = new Item(valor, topo);
			}
		}

		public String pop() {
			if (isEmpty()) {
				throw new RuntimeException("Pilha vazia");
			}
			
			String valor = topo.getValor();
			topo = topo.getAnterior();
			
			return valor;
		}

		public String getTopo() {
			if (isEmpty()) {
				throw new RuntimeException("Pilha vazia");
			}
			
			return topo.getValor();
		}

		public boolean isEmpty() {
			return topo == null;
		}
	}
	
	private static class Item {
		
		private String valor;
		private Item anterior;
		
		public Item(String valor, Item anterior) {
			this.valor = valor;
			this.anterior = anterior;
		}

		public String getValor() {
			return valor;
		}
		
		public Item getAnterior() {
			return anterior;
		}
	}
}

Lucas, esse código é uma pilha dinâmica, certoo?

Se dinâmica for em relação ao tamanho da pilha, sim.

Mas eu não preciso da classe NO?

Veja a classe Item no meu exemplo. É que fiz o exemplo num arquivo soh (com inner classes).

1 curtida

Se eu quiser que o usuário informe o valor da String e o PUSH pegue essa informação, como ficaria, Lucas?

Eu quero que o usuário vá digitando os sabores das pizzas e no final o programa desempilhe certinho. Testei seu código e tá bom, tenho que testar as exceções.

Se for para estudo, vc pode usar a classe Scanner para ler a entrada do teclado.

1 curtida

Scanner teclado = new Scanner(System.in);

String pizzaSabor;

System.out.println("Informe o primeiro sabor da pizza a ser entregue: ");
pizzaSabor=teclado.next();

Veja um exemplo:

Stack stack = new Stack();

try (Scanner scanner = new Scanner(System.in)) {
	String entrada = null;

	while (true) {
		entrada = scanner.next();

		if ("FIM".equals(entrada)) {
			break;
		}

		stack.push(entrada);
	}
}

Ola, espero que estajam todos bem!
Eu gostaria de saber como escrever x ao quadrado na tela do jframe?

O que é “tela do jframe” pra você?
Quer escrever em qual componente exatamente?