
public class ConjuntoDeInteiros {
	int[] numeros;
	int proximaPosicaoVaga;
	int tamanhoDoArray;
	
	ConjuntoDeInteiros() {
		proximaPosicaoVaga = 0;
		tamanhoDoArray = 5;
		numeros = new int[tamanhoDoArray];
	}
	
	void inserir(int e){
		if (arrayCheio()) {
			duplicarArray();
		}
		numeros[proximaPosicaoVaga] = e;
		proximaPosicaoVaga = proximaPosicaoVaga + 1;
	}

	private void duplicarArray() {
		int[] novoArray;
		novoArray = new int[2 * tamanhoDoArray];
		for (int i = 0; i < tamanhoDoArray; i = i + 1) {
			novoArray[i] = numeros[i];
		}
		numeros = novoArray;
		tamanhoDoArray = tamanhoDoArray * 2;
	}
	
	private boolean arrayCheio() {
		return proximaPosicaoVaga >= tamanhoDoArray;
	}
	
	int calcularMedia() {
		int soma;
		int media;
		soma = 0;
		for (int i = 0;i <= (proximaPosicaoVaga - 1); 
			 i = i + 1) {
			soma = soma + numeros[i];
		}	
		media = soma/proximaPosicaoVaga;
		return media;
	}
	
	void remover(int n) {
		boolean achou;
		achou = false;
		int i;
		i = 0;		
		while (i < proximaPosicaoVaga  && (achou == false)) {
			if (numeros[i] == n) {
				achou = true;
				numeros[i] = numeros[proximaPosicaoVaga - 1];
				proximaPosicaoVaga = proximaPosicaoVaga - 1;
			} else i = i + 1;
		}		
	}	
		
	void removerCaro(int n) {
			boolean achou;
			achou = false;
			int i;
			i = 0;		
			while (i < proximaPosicaoVaga  && (achou == false)) {
				if (numeros[i] == n) {
					achou = true;
					proximaPosicaoVaga = proximaPosicaoVaga - 1;
					/* Se a atribuição acima for depois do "for", 
					 * gera erro. Descubra o motivo.
					 */ 
					for (int j = i; j < proximaPosicaoVaga; j = j + 1) {
						numeros[j] = numeros[j + 1];
					}
				} else i = i + 1;
			}
	}
	
	boolean membro(int n) {
		boolean existe;
		existe = false;
		int i;
		i = 0;		
		while (i < proximaPosicaoVaga  && (existe == false)) {
			if (numeros[i] == n)
				existe = true;
			else i = i + 1;
		}
		return existe;
	}
}
