Pilhas -----> Dúvida na implementação

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: