Dúvida metodo adicionar

9 respostas
jeovane.reges

Boa noite a todos do GUJ

Bom pessoal, acredito que minha dúvida é simples para muitos user's aqui no fórum.
Minha duvida é a seguinte, tenho um metodo adiciona que vai recebendo os valores que eu for adicionando em uma lista e depois peço para esse meu metodo imprimir os elementos que adicionei.
Tentei cria-lo da seguinte maneira abaixo.

public class Vetor {
    private Aluno[] alunos = new Aluno[100];

    public void adiciona(Aluno aluno){
        for (int i = 0; i < alunos.length; i++) {
            aluno = alunos[i];
        }
    }
}
E o o local aonde vou adiciona da seguinte forma
public static void main(String[] args) {
        Aluno a1 = new Aluno();
        Aluno a2 = new Aluno();

        a1.setNome("João");
        a2.setNome("José");

        Vetor lista = new Vetor();

        lista.adiciona(a1);
        lista.adiciona(a2);

        System.out.println(lista);
    }

No entanto, quando mando imprimir minha lista ele me retorna 100 null.
O que que tenho que fazer para ele me retornar os nomes que adicionei?

Desde de já obrigado pela ajuda de todos.

9 Respostas

gustavo_mb

No seu for da classe Vetor, você está adicionando o Aluno que foi passado ao método 100x.

O que você tem que fazer então? Fazer um for para verificar a primeira posição do seu array vazia e então adicionar o Aluno.

public class Vetor {  
        private Aluno[] alunos = new Aluno[100];  
      
        public void adiciona(Aluno aluno){  
            for (int i = 0; i < alunos.length; i++) {  
                if(this.alunos[i] == null) {
                   this.alunos[i] = aluno;
                   System.out.println(this.alunos[i].getNome());
                   break; //Se não tiver o break ele vai preencher as outras posições nulas também
                } 
            }  
        }  
    }
jeovane.reges

Realmente deu certo em partes, no entanto, o resultado impresso estar da seguinte maneira.

[João, José, null, null, null,...]

Tentei fazer algumas alterações para não mostrar os null mas não deu muito certo.

Que que eu tenho que alterar ainda pra que apareça apenas os nomes?

Desde de já obrigado pela ajuda.

gustavo_mb

Provavelmente, você esqueceu de por o break.

jeovane.reges

Está da seguinte forma

public void adiciona(Aluno aluno){
        for (int i = 0; i < aluno.getNome().length(); i++) {
            if(this.alunos[i] == null){
                this.alunos[i] = aluno;
                break;
            }
        }
        //System.out.println(aluno);
    }
Onde eu mando imprimir é aqui
public static void main(String[] args) {
        Aluno a1 = new Aluno();
        Aluno a2 = new Aluno();

        a1.setNome("João");
        a2.setNome("José");

        Vetor lista = new Vetor();

        lista.adiciona(a1);
        lista.adiciona(a2);

        System.out.println(lista);
    }

Mando imprimir a minha lista.

gustavo_mb

Pondo o System.out.println dentro do método como eu havia feito, assim que você adiciona um aluno o método se encarrega de mostrar o nome.

Deixe assim:

public class Teste {

	public static void main(String[] args) {  
        Aluno a1 = new Aluno();  
        Aluno a2 = new Aluno();  
  
        a1.setNome("João");  
        a2.setNome("José");  
  
        Vetor lista = new Vetor();  
  
        lista.adiciona(a1);  
        lista.adiciona(a2);  
  
   } 
	
}
public class Vetor {   
	
    private Aluno[] alunos = new Aluno[100];    
    
    public void adiciona(Aluno aluno){    
        for (int i = 0; i < alunos.length; i++) {    
            if(this.alunos[i] == null) {  
               this.alunos[i] = aluno;  
               System.out.println(this.alunos[i].getNome());
               break; //Se não tiver o break ele vai preencher as outras posições nulas também  
            }   
        }    
    }    
}
public class Aluno {

	private String nome;

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
}
jeovane.reges

Entendi perfeitamente o que você disse.

Uma outra forma que eu estava pensando que poderia dar certo, era se no FOR eu passasse o tamanho da minha lista, tentei isso mas, não deu certo.

jeovane.reges

Fazendo alguns teste, o problema não estar no tamanho que é passado no FOR e sim no tamanho da lista que é 100.

S

O problema amigo é que você tem um Array de 100 posições, e você só esta adicionando 2 nomes nesse array e mandando ele imprimir na tela toda a lista. Então o programa imprimi os 2 primeiros valores existentes e o resto ele mostra como NULL pois não existem + nomes adicionados. Caso você queira que não sejam apresentados os valores “NULL” você deve percorer sua lista e imprimir os valores até você encontrar uma possição NULL, quando você encontrar um Null você sai do loop.
Exemplo

public void imprimirNomes() {
		int i = 0;
				
		while (aluno[i] != null) {
			System.out.println(aluno[i]);
			i++;
		}
	}
jeovane.reges

Valeu strikezado :slight_smile:
Deu certo assim ;D

Obrigado a todos pela ajuda.

Criado 30 de outubro de 2011
Ultima resposta 30 de out. de 2011
Respostas 9
Participantes 3