Uma empilhadeira carrega caixas de 7, 5, 3 toneladas. Há três pilhas A, B, C. A pilha A é onde se
encontram todas as caixas que chegam no depósito. Com um detalhe: caixas maiores não podem ser
empilhadas sobre caixas menores. Elabore um programa que efetue o controle das caixas, de forma
que caso uma caixa de maior peso do que uma que já está em A deva ser empilhada, então, todas as
caixas que estão em A são movidas para as pilhas auxiliares B (contendo somente caixa de 5
toneladas) e C (contendo somente caixas de 3 toneladas) até que se possa empilhar a nova caixa.
Depois, todas as caixas são movidas de volta para a pilha A.
Tenho que resolver esse problema, mas esta dando NullPointerException no meu programa(talvez esteja muito errado). Alguem pode me dizer o que modificar dar algumas dicas?
public class Sistema {
public static void main(String[] args) {
Caixa a = new Caixa(3);
Caixa b = new Caixa(3);
Caixa c = new Caixa(7);
Caixa d = new Caixa(5);
Caixa e = new Caixa(7);
Empilha emp = new Empilha();
emp.empilhar(a);
emp.empilhar(b);
emp.empilhar(c);
emp.empilhar(d);
emp.empilhar(e);
//emp.imprimir();
}
}
public class Empilha {
Pilha A = new Pilha();
Pilha B = new Pilha();
Pilha C = new Pilha();
public void empilhar(Caixa caixa) {
if(A.tamanho() > 0) {
if(caixa.getPeso() > A.getCaixa().getPeso()) {
this.Desempilhar(caixa);
}
if(caixa.getPeso() == 7)
A.addInicio(caixa);
else if(caixa.getPeso() == 5) {
A.addInicio(caixa);
while(B.tamanho() > 0) {
A.addInicio(B.getCaixa());
B.removerInicio();
}
}
else{
A.addInicio(caixa);
while(C.tamanho() > 0) {
A.addInicio(caixa);
C.removerInicio();
}
}
}
}
public void Desempilhar(Caixa caixa) {
while(A.getCaixa().getPeso() == 3) {
C.addInicio(A.getCaixa());
A.removerInicio();
}
while(A.getCaixa().getPeso() == 5) {
B.addInicio(A.getCaixa());
A.removerInicio();
}
}
public void imprimir() {
A.imprimir();
}
}
public class Caixa {
private int peso;
public Caixa() {
}
public Caixa(int peso) {
this.setPeso(peso);
}
public int getPeso() {
return peso;
}
public void setPeso(int peso) {
this.peso = peso;
}
}
public class Pilha {
private No inicio;
private int tam;
private int add;
public void addInicio(Caixa caixa) { //correto
No no = new No();
no.setCaixa(caixa);
no.setProx(inicio);
inicio = no;
tam++;
}
public void removerInicio() { //correto
if(tam > 0) {
inicio = inicio.getProx();
tam--;
}
}
public Caixa getCaixa() {
return inicio.getCaixa();
}
public void imprimir() { //correto
No aux = inicio;
System.out.println(aux.getCaixa().getPeso());
while(aux.getProx() != null) {
aux = aux.getProx();
System.out.println(aux.getCaixa().getPeso());
}
}
public int tamanho() {
return tam;
}
}