Novato em Java, ajuda com ARRAYs

Boa noite Pessoal, seguinte, tenho esse problema pra resolver e não estou conseguindo… é um cadastro de aluno simples (nome, telefone e email) porem tem um campo dependências que tem que ser uma arraylist porque o aluno pode ter mais de uma dependência.A minha dificuldade é fazer uma array dentro de outra array que é a array do aluno. Vamos aos dados, tenho 3 classes criadas, StartApp onde eu coleto os dados do aluno e imprimo os dados, tenho a classe Aluno que sao os getter and saters do aluno, e a classe disciplina que sao os guetters and setter das dps… e na hora de imprimir os dados do aluno deve aparecer o nome, telefone email e as dependencias que ele preencheu. alguma alma caridosa pra ajudar?

Você não precisa fazer um array de arrays. Crie uma classe Aluno, e faça as dependências um atributo da classe Aluno. Sua lista será de Alunos, e cada Aluno dentro da lista terá uma lista de dependências.

Abraço.

1 curtida

mas como eu adiciono os dados das dependências(que sao nome do professor e materia) dentro desse atributo criado na classe aluno?

minha classe ta assim.

public class Aluno {

private String nome;
private String cpf;
private String celular;
private String email;
private ArrayList<Disciplina> disciplinas;


public ArrayList<Disciplina> getDisciplinas() {
	return disciplinas;
}
public void setDisciplinas(ArrayList<Disciplina> disciplina) {
	

	this.disciplinas = disciplina;
}
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}
public String getCpf() {
	return cpf;
}
public void setCpf(String cpf) {
	this.cpf = cpf;
}
public String getCelular() {
	return celular;
}
public void setCelular(String celular) {
	this.celular = celular;
}
public String getEmail() {
	return email;
}
public void setEmail(String email) {
	this.email = email;
}

@Override
public String toString() {
	return "\n----------\n" +
			"nome:" + nome +
			"\n email:" + email +
			"\n cpf:" + cpf +
			"\ncelular:" + celular;
			//"\n quantidade de disciplinas" + disciplinas.size();
}

}

Basicamente, você adiciona as dependências da mesma forma que adicionou as disciplinas. Fica melhor se você criar um método para adicionar uma dependência individualmente, ao invés de um ArrayList inteiro. Pode fazer isso também para as disciplinas. Algo como:

public class Aluno{
  // outros atributos vão aqui
  private List<Dependencia> dependencias;

  public void adicionarDependencia(Dependencia dep){
    dependencias.add(dep);
  }
  // outros métodos
}

Sobrescreva o método toString da classe Dependencia e, no toString da classe Aluno, pode fazer algo como:

public String toString() {
      String strDep = "";
      for (Dependencia d : dependencias){
        strDep += d.toString();
      }

	return "\n----------\n" +
			"nome:" + nome +
			"\n email:" + email +
			"\n cpf:" + cpf +
			"\ncelular:" + celular + 
                        "\ndependências:" + strDep;
			//"\n quantidade de disciplinas" + disciplinas.size();
}

Dá pra fazer a mesma coisa com as disciplinas.

Abraço.

Entendi, mas na hora de colocar os dados das dependências, como vou enviar os dados para list que esta na classe aluno?

Usando o método adicionarDependencia(), que coloquei na minha outra resposta:

Aluno aluno = new Aluno();
Dependencia de = new Dependencia();
aluno.adicionarDependencia(de);

Isso é algo básico em orientação a objetos. Que materiais está estudando? Se está tendo dificuldade com isso, recomendo voltar um pouco e estudar esses itens mais básicos.

Abraço.

Comecei a ver esse semestre orientação a objetos, chamar o método e passar os parâmetros eu sei. A minha dificuldade é logo a pós o sysout(“nome da matéria:”) pq não estou conseguindo salvar o dado que o usuário fornece e mandar pra classe aluno pra salvar na lista

Eu escrevi como fazer isso na minha resposta anterior. Volte lá e reveja.

Você sobrescreve o método toString na classe Dependencia (da mesma forma que você fez pro Aluno) e, no método toString da classe Aluno, faz um loop pegando o toString de cada Dependencia, e concatena no sysout.

Abraço.

Esse método que você me falou é uma solução pra imprimir os dados no console… Eu to com dificuldade na coleta dos dados…eu estou sem o código aqui pq estou no trabalho mas la ta assim:

sysout (“nome:”)
aluno.setNome(scanner.nextline());
sysout(“idade:”);
aluno.setIdade(scanner.nextline());
sysout(“quantas dependencias possui?”)
int qtdDP = scanner.nextint(); //aqui eu pego o valor que ele informa pra fazer um for de quantas dependencias for necessarias
AGORA COMEÇA MEUS PROBLEMAS, DENTRO DO FOR PRA COLETAR AS INFORMAÇÕES DAS DEPENDÊNCIAS EU NAO CONSIGO SALVA-LAS

FOR(-------){
sysout(“nome da materia:”)
// eu coloco aqui aluno.adicionardependencias?
sysout(“nome do professor”)
// ou crio um objeto da classse dependencia e coloco DP.setNome(scanner.netxline());
}

Usando como base a sua ideia de pedir a quantidade de dependências antes:

String nomedep;
String nomeprof;

for (int i = 0; i < qtdDP ; i++){
  sysout("Nome da materia:");
  nomedep = scanner.nextLine();

  sysout("Nome do professor:");
  nomeprof = scanner.nextLine();

 Dependencia de = new Dependencia();

 de.setNome(nomedep);
 de.setProfessor(nomeprof);

 aluno.adicionarDependencia(de);  // aqui adiciona a dependencia a um aluno criado previamente
}

Se você criar um construtor que recebe o nome da matéria e do professor como parâmetros, fica mais fácil usá-lo:

for (int i = 0; i < qtdDP ; i++){
  sysout("Nome da materia:");
  nomedep = scanner.nextLine();

  sysout("Nome do professor:");
  nomeprof = scanner.nextLine();

 Dependencia de = new Dependencia(nomedep, nomeprof);

 aluno.adicionarDependencia(de);
}

Pode inclusive usá-lo diretamente no método adicionarDependencia():

for (int i = 0; i < qtdDP ; i++){
  sysout("Nome da materia:");
  nomedep = scanner.nextLine();

  sysout("Nome do professor:");
  nomeprof = scanner.nextLine();

 aluno.adicionarDependencia(new Dependencia(nomedep, nomeprof));
}

Abraço.

OOPA, Agora sim, Obrigado amigo pela paciência e pelo o ensinamento!

Abraço!