13
respostas

Instanciar um objeto através do teclado

Boa noite a todos, gostaria de saber se tem como instanciar uma nova referência utilizando o teclado, no exemplo abaixo(no caso Aluno seria minha classe principal).

        System.out.println("Adicione o nome do aluno");
        Scanner nomes = new Scanner(System.in);
        String nome = nomes.nextLine();
        Aluno ???? = new Aluno();

Obrigado

13 respostas

ola Marco Aurelio

O nome da variável local em si você não pode criar com um nome dado em tempo de execução. isso realmente precisa ser definido em tempo de compilação.

O que você pode é fazer Aluno aluno = new Aluno(); e com aluno.setNome(nome); colocá-lo dentro de uma tabela de hash, como o HashMap fazendo mapa.put(nome, aluno).

Dessa forma você fica com uma tabelona que associa um nome (String) a um objeto do tipo Aluno.

Obrigado pela resposta, eu entendi. Eu gostaria de instanciar objetos de forma automaticamente usando ArrayList, como por exemplo adicionar contas via teclado ou usando um laço for, eu sei que consigo fazer com array simples, mas ja tentei de várias formas com o ArrayList e não consegui achar uma saída.

Nesse exemplo aqui eu consigo Aluno[] aluno = new Aluno[10];

for (int i = 0; i < aluno.length; i++) { aluno[i] = new Aluno(); }

Eu gostaria de fazer isso com ArrayList.

É o mesmo principio Marco!

List<> alunos = new ArrayList<Aluno>();

for (int i = 0; i < 10; i++) { 
   Aluno a= new Aluno(); 
   a.setNome(...);
   alunos.add(a);
}

Eu tente esse código mas deu erro no aluno.length, nesse caso onde entrar a variável i ? Por que com o array comum eu vou ter no minimo 10 referencias, nesse caso eu sou obrigador a criar os alunos antes.

Aluno[] aluno = new Aluno[10]; for (int i = 0; i < aluno.length; i++) { aluno[i] = new Aluno(); }

nesse eu posso usar por exemplo aluno[0].setNome( );

No que você me passou com Array List eu crio a referência "a" varias vezes, mas nesse caso não compila pelo erro

Oi Marco

Lembre-se que em collections não existe propriedade lengthe sim size(). Eu que errei no codigo lá de cima. Está ajustado para i < 10, pois se usassemos o size ali, ele seria 0, que é o tamanho inicial de uma arraylist, pois ela começa vazia nessa caso.

Eu entendi, já tinha feito desse antes mesmo mas não da certo ele cria as mesmas referencias, quando faço isso

System.out.println(alunos.get(0)); System.out.println(alunos.get(1));

é retornado o mesmo valor para os dois. meu objetivo é criar um for que crie 10 referencias e que não sejam todas iguais, aquele código é a mesma coisa que repetir 10x o mesmo passo um sobrepondo o outro, por enquanto só consegui fazer o array normal onde em cada laço utilizado a variável "i" eu crio uma referência diferente. Acho que o buraco é mais embaixo, obrigado pela ajuda, eu vou pesquisar um pouco mais.

Eu preciso desse código mas em ArrayList: Onde vou criar aluno[0], aluno[1], aluno[2]... n

Aluno[] aluno = new Aluno[10];

for (int i = 0; i < aluno.length; i++) { aluno[i] = new Aluno(); }

Pode postar todo seu código? Não era para ser o mesmo objeto se o new está dentro do loop assim como o add.

Eu tentei fazer esse código com Array List e não consegui, Fiz em array comum e funcionou normalmente, meu objetivo seria cadastrar novos alunos.

package br.com.universoMakers.main;

//Programa cadastra alunos e notas e no final calcula a média total da sala
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import br.com.universoMakers.modelo.Aluno;

public class Principal {
    public static void main(String[] args) {
        double totalNota = 0;
        int sair = 1;
        int j = 0;

        List<Aluno> alunos = new ArrayList<Aluno>();
        Aluno[] aluno = new Aluno[10];

        for (int i = 0; i < aluno.length; i++) {
            aluno[i] = new Aluno();
        }
        while (sair == 1) {

            System.out.println("Digite o nome do aluno: ");
            Scanner id = new Scanner(System.in);
            String nome = id.nextLine();

            System.out.println("Digite a nota do aluno: ");
            Scanner nota = new Scanner(System.in);
            double notas = nota.nextDouble();

            aluno[j].setNome(nome);
            aluno[j].setNota(notas);

            j++;

            System.out.println("Para continuar cadastrando digite 1 ou 0 para sair");
            Scanner out = new Scanner(System.in);
            sair = out.nextInt();
        }

        for (int i = 0; i < j; i++) {

            System.out.println("Dados do Aluno");
            System.out.println("Aluno: " + aluno[i].getNome());
            System.out.println("Nota: " + aluno[i].getNota());

            totalNota += aluno[i].getNota();

        }

        totalNota = totalNota / j;
        System.out.println("Total de " + j + " cadastrados, a média da sala e: " + totalNota);
    }

}

Editei para funcionar com o arraylist. Talvez haja algum erro de digitacao (estou sem computador aqui)

package br.com.universoMakers.main;

//Programa cadastra alunos e notas e no final calcula a média total da sala
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import br.com.universoMakers.modelo.Aluno;

public class Principal {
    public static void main(String[] args) {
        double totalNota = 0;
        int sair = 1;
        int j = 0;

        List<Aluno> alunos = new ArrayList<Aluno>();
        Aluno[] aluno = new Aluno[10];

        for (int i = 0; i < 10; i++) {
            alunos.add(new Aluno());
        }
        while (sair == 1) {

            System.out.println("Digite o nome do aluno: ");
            Scanner id = new Scanner(System.in);
            String nome = id.nextLine();

            System.out.println("Digite a nota do aluno: ");
            Scanner nota = new Scanner(System.in);
            double notas = nota.nextDouble();

            alunos.get(j).setNome(nome);
            alunos.get(j).setNota(notas);

            j++;

            System.out.println("Para continuar cadastrando digite 1 ou 0 para sair");
            Scanner out = new Scanner(System.in);
            sair = out.nextInt();
        }

        for (int i = 0; i < j; i++) {

            System.out.println("Dados do Aluno");
            System.out.println("Aluno: " + alunos.get(i).getNome());
            System.out.println("Nota: " + alunos.get(i).getNota());

            totalNota += alunos.get(i).getNota();

        }

        totalNota = totalNota / j;
        System.out.println("Total de " + j + " cadastrados, a média da sala e: " + totalNota);
    }

}

Agora foi, muito obrigado eu não conhecia o comando abaixo.

for (int i = 0; i < 10; i++) { alunos.add(new Aluno()); }

Abraço

repare que é o mesmo efeito:

for (int i = 0; i < 10; i++) { 
  Aluno a = new Aluno();
  alunos.add(a); 
}

Entendi agora eu substitui e deu certo, eu tinha feito assim desde o começo, mas não sei o que fiz durante o percurso que não estava dando o resultado final certo, porém agora eu consigo enxergar. Obrigado.