Exercício JAVA - Trabalho do Semestre

Pessoal, estou apanhando muito para resolver esse exercício que preciso entregar, gostaria
de saber se alguém sabe como solucionar isso.

Pilha

Pilha é uma estrutura de dados linear que pode ser acessada somente por uma de suas extremidades para armazenar e recuperar dados. Podemos fazer uma associação que uma pilha de pratos: o primeiro prato a ser utilizado é o prato mais alta da pilha, o último que foi empilhado. Uma pilha é chamada de LIFO (last in / first out)
Uma pilha é definida em termos das operações que modificam e das que verificam seu status. As operações são:
Clear() – limpa a pilha
isEmpty() – Verifica se a pilha está fazia
isFull() – Verifica se a pilha está cheia
push(element) – coloca o item element no alta da pilha (empilha)
pop() – desempilha o elemento do topo da pilha – retirando-o da pilha.
topElement() – retorna o elemento mais alta da pilha sem removê-lo.

Implemente uma pilha com as operações definidas acima. Sendo que no construtor da pilha deverá ser informado a quantidade máxima de elementos que poderão ser armazenados na pilha. Assim, a sua pilha deverá:

  1. Verificar se ainda existe espaço para armazenar um novo elemento no método de push, caso contrário deverá ser exibido uma mensagem de erro.
  2. Verificar se a pilha está vazia antes de desempilhar um elemento, se isto ocorrer, uma mensagem de erro de deverá ser exibida.

Para estar a sua implementação de Pilha, deverá ser implementado um programa que realize a soma de nós números inteiros utilizando a sua Pilha construída. Veja o exemplo no diagrama:

Ainda, a sua implementação deverá ser capaz de salvar em disco as pilhas e ter a opção da leitura dos dados armazenados em disco.

Agora segue o que eu tentei fazer:

public class Pilha {

int[]elements;
int topo;

public Pilha() {
	elements = new int[5];
	topo = -1;
	
}

public void push (int e) { //poe algo na pilha
	if (isFull()) {
		System.out.println("Pilha Cheia"); //tratamento de exceçao //recurso java
	}
	topo++;
	elements[topo] = e;
}



public int pop () { //retira algo da pilha
	if (isEmpty()) {
		System.out.println("Pilha vazia");
	}
	int e;
	e = elements[topo];
	topo--;
	return e;
}

public boolean isEmpty() {
	return (topo == -1);
}
public boolean isFull() {
	return (topo == elements.length);
}
public int top() { //verifica o que está no topo da pilha
	if (isEmpty()) {
		System.out.println("Pilha Vazia");
	}
	return this.elements[topo];
}
public void clear() {  //limpa a pilha
	for(int i = 0; i < elements.length; i++)  
		elements[i] = 0;  
	topo = 0;
}  

}

public class Main {

public static void main(String[] args) {
  
	Pilha p = new Pilha();
	
	p.push(1);
	p.push(2);
	p.push(3);
	p.push(4);
	p.push(5);
	
	while (p.isEmpty()==false) {
		System.out.println(p.pop());
	}
	
	
	while (p.isFull()==true) {
		System.out.println("Pilha Cheia");
	}
	
	p.clear(); //teste de limpeza
	
	System.out.println(p.pop());
	


}

}

As minhas ficaram assim. Tbm to aprendendo e resolvi treinar:
public class Pilha {
int[] elementos;
int qntElementos;

public Pilha(int tamanho) {
		elementos = new int[tamanho];
		qntElementos = 0;
	}

	public boolean isEmpty() {
		return (qntElementos == 0);
	}

	public boolean isFull() {
		return (qntElementos == (elementos.length));
	}

	public void clear() {
		for (int i = 0; i < elementos.length; i++) {
			elementos[i] = 0;
		}
		qntElementos = 0;
	}

	public void push(int e) {
		if (this.isFull()) {
			System.out.println("erro. lista cheia");
			return;
		} else {
			elementos[qntElementos] = e;
			qntElementos++;
		}
	}

	public int pop() {
		if (this.isEmpty()) {
			System.out.println("lista vazia");
			return 0;
		} else {
			int temp = elementos[qntElementos-1];
			elementos[qntElementos-1] = 0;
			qntElementos--;
			return temp;
		}
	}

	public String toString() {
		StringBuilder b = new StringBuilder();
		b.append("[");
		for (int i = 0; i < elementos.length; i++) {
				b.append(elementos[i]);
				
				if (i != elementos.length-1) {
					b.append(", ");
			}
		}
		b.append("]");
		return b.toString();
	}
}
1 curtida

public class TestePilha {

public static void main(String[] args) {

	Pilha p1 = new Pilha(4);
	Pilha p2 = new Pilha(4);

	p1.push(5);
	p1.push(9);
	p1.push(2);

	p2.push(3);
	p2.push(7);
	p2.push(8);
	p2.push(4);

	System.out.println("p1" + p1.toString());
	System.out.println("p2" + p2.toString());
	
	
	
	Pilha p3 = new Pilha(4);
	int temp = 0;
	
	while ( !p1.isEmpty() || !p2.isEmpty()) {
		temp += p1.pop();
		temp += p2.pop();	
		if (temp < 10) {
			p3.push(temp);
			temp=0;
		}else{
			p3.push(temp-10);
			temp=1;
		}
	}

	System.out.println("p1" + p1.toString());
	System.out.println("p2" + p2.toString());
	System.out.println("p3" + p3.toString());
}

}

1 curtida

Rapaz, espero que seja isso que o prof quer hahahhaha
aparentemente ta tudo certo, valeu mesmo!!!