Metodos da apostila, nao estou conseguindo entender

10 respostas
olivercld

boa noite my friends estou fazendo os exercicios e lendo entendi o metodo, mais nao entendi o que as linhas fazem dentro desse metodo porque tanta coisa, alguem se disponibiliza a me explicar obrigado!

// metodo adiciona aluno
	public void adiciona(int posicao, Aluno aluno) {

		if (!this.posicaoValida(posicao)) {
			throw new IllegalArgumentException("Posicao invalida");
		}
		for (int i = totalDeAlunos - 1; i >= posicao; i--) {
			alunos[i + 1] = alunos[i];
		}
		this.alunos[posicao] = aluno;
		this.totalDeAlunos++;
	}

//metodo remove 
	public void remove(int posicao) {
		if(!posicaoOcupada(posicao)){
			throw new IllegalArgumentException("posicao invalida ");
		}
		for(int i = posicao; i < totalDeAlunos -1; i++){
			alunos[i] = alunos[i +1];
		}
		this.totalDeAlunos --;

	}

desde já agradeço a ajuda, gostaria de entender melhor cada linha desses metodos “codigos”,obrigado pela paciencia abraço.

10 Respostas

L

ta faltando codigo, coloca o resto ai

JoatanGuj

olivercld:
boa noite my friends estou fazendo os exercicios e lendo entendi o metodo, mais nao entendi o que as linhas fazem dentro desse metodo porque tanta coisa, alguem se disponibiliza a me explicar obrigado!

// metodo adiciona aluno
	public void adiciona(int posicao, Aluno aluno) {//cria esse metodo que necessita de 2 parametros

		if (!this.posicaoValida(posicao)) {//cria uma condicao para que se a posicao for invalida ele mostra essa mensagem
			throw new IllegalArgumentException("Posicao invalida");
		}
		for (int i = totalDeAlunos - 1; i >= posicao; i--) {// pro int i = a variavel totalDeAlunos-1 e o i menor ou igual a posicao o i vai diminuir
			alunos[i + 1] = alunos[i];// faz essa soma onde o vetor alunos com parametro i +1 recebe alunos com parametro i
		}
		this.alunos[posicao] = aluno;//isso deve ser um vetor global que ta recebendo na posicao indicada o valor aluno
		this.totalDeAlunos++; //acrescenta o total de alunos
	}

//metodo remove 
	public void remove(int posicao) {//cria o metodo remove que necessita da posicao do aluno a ser removido(o parametro)
		if(!posicaoOcupada(posicao)){// cria uma condicao para que se a posicao que voce da como parametro ja estiver sendo ultilizada ele retorne essa mensagem
			throw new IllegalArgumentException("posicao invalida ");
		}
		for(int i = posicao; i < totalDeAlunos -1; i++){//para o i igual a posicao e o i menor que o total de alunos menos 1 o i acrescenta
			alunos[i] = alunos[i +1];// vetor aluno na posicao i recebe vetor alunos na posicao i +1
		}
		this.totalDeAlunos --//total de alunos diminui

	}

desde já agradeço a ajuda, gostaria de entender melhor cada linha desses metodos “codigos”,obrigado pela paciencia abraço.

Bem se faltou algo [e porque realmente n’ao da pra explicar sem o codigo completo. So da pra ter uma nocao.

olivercld

já deu para entender, ter uma noção, depois vou postar o codigo inteiro do restante dos metodos, estou escrevendo eles. obrigado por enquanto.
valeu JoatanGuj, lineofgol

JoatanGuj

olivercld:
já deu para entender, ter uma noção, depois vou postar o codigo inteiro do restante dos metodos, estou escrevendo eles. obrigado por enquanto.
valeu JoatanGuj, lineofgol

precisar ja sabe :wink:

olivercld

ok amigão, logo logo posto o restante dos codigos metodos ok valeu abraço.

olivercld

terminei poderiam aproveitando me explicar se possível, se nao for nenhum incomodo

package br.com.caelum.ed;

public class Vetor {
	// declarando e inicializando um array de aluno com capacidade 100
	/**
	 * Se amanhã ou depois precisarmos de uma Lista de carro ou uma Lista de
	 * computador teríamos que implementar novamente o Vetor. Em vez de
	 * colocarmos um array de Aluno na classe Vetor vamos colocar um array de
	 * Object. Assim, estamos generalizando a nossa estrutura de dados. Desta
	 * forma, poderemos armazenar qualquer tipo de objeto.
	 */

	private Object[] objetos = new Object[100];

	private int TotalDeObjetos = 0;// atributo para guardar a quantidade de

	// alunos existentes na lista

	/**
	 * 
	 * @param aluno
	 */
	public void adiciona(Object objeto) {
		this.garantaEspaço();// verifica antes se tem espaço para adicionar
		// aluno
		this.objetos[TotalDeObjetos] = objeto;
		this.TotalDeObjetos++;
		
		// implementação que leva mais tempo
		/*
		 * for (int i = 0; i < this.alunos.length; i++) { if (this.alunos[i] ==
		 * null) {// achando o primeiro valor null // guarda o alunonessa
		 * referencia. this.alunos[i] = aluno;// achando o valor null entao
		 * guarda o // aluno. break;// para o laço for quando for encontrado } }
		 */

	}

	/**
	 * esse metodo tem como caracteristica verificar se o array esta cheio. caso
	 * estiver cheio ele criará um novo array com o dobro do tamanho e moverá os
	 * alunos do array antigo para o novo. O metodo garantaEspaco() so e util
	 * dentro da classe vetor, e nao sera disponivel para o usuario por isso
	 * esta como private
	 */
	private void garantaEspaço() {
		if (this.TotalDeObjetos == this.objetos.length) {
			Object[] novaArray = new Object[this.objetos.length * 2];
			for (int i = 0; i < objetos.length; i++) {
				novaArray[i] = this.objetos[i];

			}
			this.objetos = novaArray;
		}
	}

	// metodo para deslocar aluno de posicao
	public void adiciona(int posicao, Aluno aluno) {
		this.garantaEspaço(); // verificar se tem espaço
		if (!this.posicaoValida(posicao)) {
			throw new IllegalArgumentException("posicao invalida");

		}
		for (int i = TotalDeObjetos - 1; i >= posicao; i--) {
			this.objetos[i + 1] = objetos[i];
		}
		this.objetos[posicao] = aluno;
		this.TotalDeObjetos++;
	}

	public Object pega(int posicao) {
		if (!this.posicaoOcupada(posicao)) {
			throw new IllegalArgumentException("posicao invalida");
		}
		return this.objetos[posicao];
	}


	/**
	 * este metodo faz com que compara o aluno dado com os demais alunos
	 * existentes
	 * 
	 * @param aluno
	 */
	public boolean contem(Aluno aluno) {
		for (int i = 0; i < this.TotalDeObjetos; i++) {// nao e necessario
			// percorrer o array
			// todo para achar o
			// aluno,nos podemos
			// obter a ultima posiçao ocupada atraves do atributo TotalDeAlunos
			// // totaldeobjetos
			if (aluno.equals(this.objetos[i])) {
				// equals e para comparar object
				return true;
			}
		}
		return false;
	}

	/**
	 * esse metodo devolve verdadeiro se posicao estiver ocupada ou false caso
	 * contrario
	 * 
	 * @param posicao
	 * @return verdadeiro se a posicao estiver ocupada e falso se nao estiver
	 */
	public boolean posicaoOcupada(int posicao) {
		return posicao >= 0 && posicao < this.TotalDeObjetos;

	}

	/**
	 * este metodo verifica se podemos adicionar um aluno numda dada posicao
	 * devemos testar se o aluno esta no intervalo [0, this.TotalDeAlunos]
	 * 
	 * @param posicao
	 * @return um aluno numa dada posicao
	 */
	private boolean posicaoValida(int posicao) {
		return posicao >= 0 && posicao <= TotalDeObjetos;
	}

	/**
	 * esta implementaçao ficou simples porque na classe vetor ja tem o atributo
	 * para armazenar a quantidade de alunos armazenados.Entao basta devolver o
	 * valor do total de alunos.
	 */
	public int tamanho() {
		return this.TotalDeObjetos;
	}

	/**
	 * utilizamos a classe StringBuilder para Construir a String que mostrara os
	 * elementos da lista.
	 */
	public String toString() {
		if (this.TotalDeObjetos == 0) {
			return "[]";
		}
		StringBuilder builder = new StringBuilder();
		builder.append("[");

		for (int i = 0; i < this.TotalDeObjetos - 1; i++) {
			builder.append(this.objetos[i]);
			builder.append(", ");

		}
		builder.append(this.objetos[TotalDeObjetos - 1]);
		builder.append("]");
		return builder.toString();
		// return Arrays.toString(alunos);
	}

}

os metodos lendo e fazendo os exercicios eu entendi, oque nao entendi e alguns totalDeObjetos - 1 isso por exemplo, gostaria de entender mais, do jeito que o amigo JoatanGuj explicou aqui para mim eu entendi o dois metodos, se possivel for puderem me explicar eu gradeço.
até mais

hvivox

o que especificamente vc não entendeu?

this.TotalDeObjetos - 1; Bem está linha significa que ele está decrementando o valor da variável this.Total…, Algo mais?

olivercld

por exemplo hvivox o metodo to String algumas linhas ali ta meia confusa, o metodo remove e adiciona ja me explicaram. valeu orbigado

JoatanGuj
public String toString() {  
        if (this.TotalDeObjetos == 0) {  // se não tiver objetos retona apenas "[]" isso. e claro, é vazio porque não tem objetos.
            return "[]";  
        }  
        StringBuilder builder = new StringBuilder();  // Instancia a StringBuilder.
        builder.append("[");  //aciciona na builder o valor em String > "[" . oque temoa até agorá?, bem se o vetor não estiver vazio temos isso > "[", guarde as infomações pra entender
  
        for (int i = 0; i < this.TotalDeObjetos - 1; i++) {  //cria uma condição para que i = 0 e i menor que o Total de Objetos -1; enquando isso for verdadeiro o "i" vai acrescentar.
            builder.append(this.objetos[i]);  // enquanto o for tiver sendo rodado ele vai adicionar os objetos existentes no teu Array aqui. digamos que seus objetos até agora vc só tem os objetos "oi" e "oioi"
//oque esse for vaifazer é justamente incluir esses teus objetos aqui na builder. e depois por uma virgula , 
            builder.append(", ");  //< tae a virgula. pra separar.
          //oque temos até agora? , bom juntando tudo e aceitando os objetos que dei como exemplo temos isso "[ oi, oioi, " < essa virgula no final será corigida logo abaixo.
  
        }  
        builder.append(this.objetos[TotalDeObjetos - 1]);  //adiciona o ultimo objeto depois daquela virgula o valor dele é =(Objeto na posição TotaldeObjetos -1) diagamos que esse objeto tem valor "oioioi".
        builder.append("]");// fecha a chaves, no final temos isso >> "[oi, oioi, oioioi]"  <<< ;)
        return builder.toString();  
        // return Arrays.toString(alunos);  
    }
se você olhar bem verá que isso é nada mais nada menos que a criação de um vetorzinho de String baseado no Array de objetos
olivercld

hum entendido, meus sinceros agradecimentos aos colegas JoatanGuj, hvivox, lineofgol

Criado 8 de setembro de 2011
Ultima resposta 12 de set. de 2011
Respostas 10
Participantes 4