GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Como iniciar uma variável array em outra classe

Pessoal, sou iniciante em java. Queria saber como posso iniciar a variável double[][] notas em outra classe. Lembrando que essa classe Aluno está com os métodos get e set. A classe Aluno eu declarei na classe principal como sendo um array também com 5 alunos, cada aluno terá 4 notas. Mas não sei como declarar o array de notas na classe principal pra inserir as notas para cada Aluno. Segue uma parte do código das duas classes:

CLASSE 1
public class Aluno {
private String nome;
private String matricula;
private double[][] notas;
… continua a classe com metódos get e set de cada atributo
}

CLASSE 2
public class Main {
public static void main(String[] args) {
Aluno[] alunos = new Aluno[5];

    for (int i = 0; i < alunos.length; i++) {
        Aluno aluno = new Aluno();
        System.out.println("Digite o nome do aluno");
        aluno.setNome(scan.next());
        System.out.println("Digite a matrícula do aluno");
        aluno.setMatricula(scan.next());
        for (int j = 0; j < aluno.getNotas()[i].length; j++) {
            System.out.println("Digite a nota"+ j+1 +"do aluno");
            
        }
        alunos[i] = aluno;
    }

}

Supondo que o aluno precisa apenas 4 notas, você precisa de um array de apenas uma dimensão (double[] ) em vez de um array de duas dimensões como você está sugerindo (double[][]).

Você pode criar o array diretamente na inicialização, seja na declaração do atributo:


public class Aluno {
  private String nome;
  private String matricula;
  private double[] notas = new double[4];
}

Ou no constutor:

public class Aluno {
  private String nome;
  private String matricula;
  private double[] notas;

  public Aluno(){
    notas = new double[4];
  }
}

Obviamente, vai precisar de um método para acessar as notas e atribuir valores (ex: um setNotas).

Abraço.

Obrigado pela ajuda. O que acontece é que a Classe Aluno será um array também que eu declarei na classe principal, pois serão 5 alunos nesse exercício. Daí eu coloquei notas como um array de duas dimensões porque cada aluno terá 4 notas.

Aí lá na classe principal eu fiz um for, que vai criar cada aluno, e dentro dele fiz outro for pra setar as 4 notas de cada Aluno. Mas eu não sei como eu posso iniciar o array de notas e chamar o método setNotas nesse for que está em outra classe, que no caso é classe principal.

Se cada aluno terá 4 notas, então o array será unidimensional.
Cada objeto do tipo Aluno terá seu array de 4 posições.
Exatamente como o @TerraSkilll exemplificou.

Ah blz, agora entendi @staroski . Eu fiz como o @TerraSkilll falou, declarei na classe Aluno private double[] notas = new double[4]; e o método get e set tá feito lá também. Só ainda não to sabendo como usar o método set na classe Main. Tá assim nesse momento:

    Aluno[] alunos = new Aluno[5];

    for (int i = 0; i < alunos.length; i++) {
        Aluno aluno = new Aluno();
        System.out.println("Digite o nome do aluno");
        aluno.setNome(scan.next());
        System.out.println("Digite a matrícula do aluno");
        aluno.setMatricula(scan.next());
        for (int j = 0; j < aluno.getNotas().length; j++) {
            System.out.println("Digite a nota"+ j+1 +"do aluno");
            aluno.setNotas(scan.nextDouble(j)); //aqui tá sublinhado vermelho mostrando erro.
        }
        alunos[i] = aluno;
    }

Você pode criar um método setNota que recebe o índice da nota a ser atribuída e o valor. Algo como:


// setNota na classe Aluno:
public void setNota(int indice, double nota){
  this.notas[indice] = nota;
}

// Loop na classe principal:
for (int j = 0; j < aluno.getNotas().length; j++) {
    System.out.println("Digite a nota"+ j+1 +"do aluno");
    aluno.setNota(j, scan.nextDouble());
}

Ou pode ter um array auxiliar na sua classe principal, que é passado inteiro para um setNotas:

// setNotas na classe Aluno:
public void setNotas(double[] notas){
  this.notas = notas;
}

// loop na classe principal
for (int i = 0; i < alunos.length; i++) {
        Aluno aluno = new Aluno();
        double[] notas_aux = new double[4];// array auxiliar
        System.out.println("Digite o nome do aluno");
        aluno.setNome(scan.next());
        System.out.println("Digite a matrícula do aluno");
        aluno.setMatricula(scan.next());
        for (int j = 0; j < aluno.getNotas().length; j++) {
            System.out.println("Digite a nota"+ j+1 +"do aluno");
            notas_aux[j] = scan.nextDouble(); // lê para o array auxiliar
        }
        aluno.setNotas(notas_aux); // passa o array auxiliar pro Aluno
        alunos[i] = aluno;
    }

Abraço.

Muito obrigado @TerraSkilll . Consegui entender. Utilizei a primeira opção e deu certo!

//