Bom, gostaria que se possível vcs me auxiliassem a resolver minhas dúvidas na implementação de pilhas…
Projete uma classe que contenha duas pilhas “vermelha” e outra “preta” e suas operações são adaptações “coloridas” das operações habituais de pilhas. Por exemplo, esta classe deve prover uma operação push vermelha e uma operação de push preta.Usando um único array cuja capacidade é limitada por um tamanho N que é sempre maior do que os tamanhos somados das duas pilhas.A pilha “vermelha” pode começar no início do array e a pilha “preta” pode começar no final do array.
Eu criei a interface:
public interface MinhaPilhaColorida {
public int sizeVermelha();
public int sizePreta();
public boolean isEmptyVermelha();
public boolean isEmptyPreta();
public Object topVermelha() throws MinhaPilhaColoridaVaziaExcecao;
public Object topPreta() throws MinhaPilhaColoridaVaziaExcecao;
public void pushVermelha(Object o);
public void pushPreta(Object o);
public Object popVermelha() throws MinhaPilhaColoridaVaziaExcecao;
public Object popPreta() throws MinhaPilhaColoridaVaziaExcecao;
}
Criei a classe de Exceção:
public class MinhaPilhaColoridaVaziaExcecao extends RuntimeException {
public MinhaPilhaColoridaVaziaExcecao(String err){
super(err);
}
}
Criei a classe do array:.
public class MinhaPilhaColoridaArray implements MinhaPilhaColorida {
//Definindo as variaveis
private int capacidade;
private Object[] a;
int t;
// public static final int N = 100;
//Criando construtor
// public static int final capacidade = 200;
public MinhaPilhaColoridaArray(int cap){ //super que A[3]
//public static final capacidade = 200;
t=-1;
capacidade = cap;
a= new Object[capacidade]; //A[3] A[10]
}
//public final capacidade = 200;
public void pushVermelha(Object o) throws
MinhaPilhaColoridaVaziaExcecao {
if(t>=capacidade-1) {
Object b[]= new Object[capacidade];
for(int f=0; f<a.length; f++)
b[f] = a[f];
a=b;
}
a[++t]=o;
}
public void pushPreta(Object o) throws MinhaPilhaColoridaVaziaExcecao {
if(t>=capacidade-1) {
Object b[]= new Object[capacidade];
for(int f=0; f>=a.length; f++)
a[f] = b[f];
b=a;
}
a[++t]=o;
}
public Object popPreta()throws MinhaPilhaColoridaVaziaExcecao {
if(isEmptyPreta())
throw new MinhaPilhaColoridaVaziaExcecao("A Pilha está vazia");
Object r=a[t--];
return r;
}
public Object popVermelha()throws MinhaPilhaColoridaVaziaExcecao {
if(isEmptyVermelha())
throw new MinhaPilhaColoridaVaziaExcecao("A Pilha está vazia");
Object r=a[t--];
return r;
}
public Object topVermelha()throws MinhaPilhaColoridaVaziaExcecao {
if(isEmptyVermelha())
throw new MinhaPilhaColoridaVaziaExcecao("A Pilha está vazia");
return a[t];
}
public Object topPreta()throws MinhaPilhaColoridaVaziaExcecao {
if(isEmptyPreta())
throw new MinhaPilhaColoridaVaziaExcecao("A Pilha está vazia");
return a[t];
}
public boolean isEmptyVermelha(){
return t==-1;
}
public boolean isEmptyPreta(){
return t==-1;
}
public int size(){
return t+1;
}
public int sizeVermelha(){
return t+1;
}
public int sizePreta(){
return t+1;
}
}
Criei a classe para testar a pilha:
import corejava.*;
public class TesteMinhaPilhaColorida {
public static void main(String[] args){
Integer[] b = new Integer[1];
MinhaPilhaColoridaArray preta = new MinhaPilhaColoridaArray(10);
MinhaPilhaColoridaArray vermelha = new MinhaPilhaColoridaArray(10);
int n= Console.readInt("Digite um valor n:");
System.out.println("Inserindo Pilha vermelha");
for(int f=0;f<n;f++){
System.out.println(f);
vermelha.pushVermelha(new Integer(f));
}
System.out.println("Inserindo Pilha Preta");
for(int f=n-1; f>=0; f--){
System.out.println(f);
preta.pushPreta(new Integer(f));
}
}
}
AS minhas dúvidas são as seguintes:
–>Na classe MinhaPilhaColoridaArray não estou sabendo onde definir que a capacidade do array é limitada por um tamanho N(no caso eu defini em TesteMinhaPilhaColorida que era 10, quando eu criei objetos dessa classe(Pilha Vermelha e Pilha Preta) que tem q ser maior do que a soma dos tamanhos da pilha.
–> Na classe TesteMinhaPilhaColorida defini dois “for” um de 0 até n(que eu digito e tem q estar no limite do array) -->Pilha Vermelha. E o outro “for” de n até 0. Não sei como colocar para a Pilha Preta iniciar do final do array da Pilha Vermelha.E não sei se isso eu defino nessa classe ou na MinhaPilhaColoridaArray.
Agradeço a atenção e paciência, devido a esse código enorme e se minhas dúvidas tão meio confusas… :?: :!:
Abraços… :lol: