Questão em Java?

Não estou conseguindo resolver essa questão, fiz mais ou menos assim, mas não consigo dar continuidade, como posso resover?

Imagem:

Código:

package Tarefa10;

import java.util.Scanner;

public class GerenciadorMatricula {
private Matricula matricula;
private Integer codigoSeq;

public Matricula getMatricula() {
	return matricula;
}
public void setMatricula(Matricula matricula) {
	this.matricula = matricula;
}
public Integer getCodigoSeq() {
	return codigoSeq;
}
public void setCodigoSeq(Integer codigoSeq) {
	this.codigoSeq = codigoSeq;
}

// Metodos

public void cadastrar(Object Matricula) {
Matricula cadastrar = new Matricula();
 
}
public void buscarMatriculas(Object aluno) {	
}
public void gerarCodigoSequencial(int codigoSeq){
}

}

Cara, seus métodos estão recebendo os parâmetros errados.
Olhando o UML que você postou, o método cadastra recebe um parâmetro chamado mat do tipo Matricula.

Acho que a interpretação do UML esteja errada.

Veja:

+ cadastra(mat: Matricula) : void

O sinal de mais (+) representa o modificador de acesso público (public). Se fosse privado seria sinal de menos (-).
A palavra cadastra é o nome do método.
(mat: Matricula) dentro dos parênteses você tem seus parâmetros, mas nesse caso você tem apenas um. O nome dele é mat e o tipo é Matricula.
: void por fim, chega o retorno do método, que no seu caso é void.

Ou seja, dado um UML com a seguinte representação: - add(p: Pessoa): boolean significa:

  • O método é privado;
  • O nome do método é add;
  • O método tem apenas um parâmetro chamado p do tipo Pessoa;
  • O método retorna boolean;

A implementação do corpo do método cadastra está errada.
O exercício fala para você receber um objeto do tipo Matricula.
Fala para você gerar um código a partir de outro método e atribuir ao objeto Matricula
Colocar no vetor.

public void cadastra(Matricula mat) {
    mat.setCodigo(gerarCodigoSequencial());
    for(int i = 0; i < matricula.length; i++) {
        if(matricula[i] == null) {
            matricula[i] = mat;
            return;
        }
    }
}

Nesse exemplo recebemos um objeto do tipo Matricula e setamos seu código (não sei como você está chamado aí, eu chamei de setCodigo) a partir do método que gera o código e colocamos esse objeto na primeira posição do array/vetor que é nula. Após incluir usamos o return para sair do método (seu array pode ter mais de uma posição nula, se não sairmos do método ele vai inserir mais vezes).

Apenas como sugestão, converse com quem fez esse exercício e comente sobre o array matricula[] pois por convenção / clean code, nós chamos coleções, arrays ou listas no plural. Ou seja, o “mais correto” seria o array se chamar matriculas[] e não matricula[].

Abs.

1 curtida

Uma maneira mais eficiente de guardar a matrícula no array é armazenar a última posição que foi utilizada, evitando o loop todas as vezes que uma matrícula for ser salva.

Por exemplo:

private int ultimaPosicao = 0;

public void cadastra(Matricula mat) {
    mat.setCodigo(gerarCodigoSequencial);
    if (matricula.length > ultimaPosicao) {
        matricula[ultimaPosicao++] = mat;
    } else {
        // O array ta cheio, aloca um maior e copia o velho pro novo,
        // ou então dá throw uma exception
    }
}
2 curtidas

Olá maravilha estou adicionando seu cod, muito obrigado pela resposta… vc conseguiria me ajudar resolver todo este exercico? função de buscas, e principalmente gerar codigo sequencial?

1 curtida

Olá maravilha estou adicionando seu cod, muito obrigado pela resposta… vc conseguiria me ajudar resolver todo este exercico? função de buscas, e principalmente gerar codigo sequencial?

Cara, o método de busca é igual ao método de cadastra, mas ao contrário.
O de gerar o número é só fazer um for e pegar o próximo número…

public void buscarMatriculas(Aluno aluno){
  for(int i = 0; i < matriculas.length; i++){
	  if(matriculas[i].)
  }

Conseguir fazer até ai… È este mesmo passo né?

E como seria o for do GerarCodigo?

Igor acho que conseguir fazer o metodo buscar porem esta com algum erro…

public Matricula[] buscarMatricula(Aluno aluno){
	busca[] = matricula;
  for(int i = 0; i < matricula.length; i++){
	  if(matricula[i].getCodigo() == aluno.getCodigo()){
		  matricula[i] = matricula[i];
	  }
  }
  return busca[];

metodo gerar codigo sequencial:

	public int gerarCodigoSequencial() {
		codigoSeq++;
		return codigoSeq;
	}