Ajuda com código java

9 respostas
java
H

Boa noite… estou começando no Java e estou com algumas dificuldades
Peguei uma prova pra fazer, vou digitá-la aqui.
Prova de Programação Orientada a Objeto - Diurno

Um curso de informática precisa de um sistema para cadastrar seus alunos. Cada turma de alunos usa o laboratório em um horário específico durante a semana e tem no máximo 20 alunos. Crie uma classe para as turmas e outra para os alunos. A classe das turmas precisa ter como atributos o nome do curso, o dia da semana e o horário de início, além da lista de alunos. A classe para os alunos precisa registrar código do aluno, que é um valor inteiro, seu nome, a nota final e a quantidade de faltas. Lembre-se que do ponto de vista do usuário, apenas a classe das turmas é visível. A classe dos alunos serve apenas para definir os elementos da lista de alunos que está na classe das turmas.

O programa deve também declarar a interface AlunControl que será implementada pela classe de turmas. Esta interface declara os seguintes métodos:

void IncluirAluno(int codigo, string Nome);

Inclui um aluno na lista de alunos. Note que o máximo permitido em cada turma é 20 alunos. Se ocorrer uma tentativa de incluir mais do que 20 alunos o método deve lançar uma exceção. Crie uma exceção específica para este caso. Quando um aluno é incluído, a nota final e a quantidade de faltas ficam zeradas. Estes atributos serão atualizados por outros métodos.

int BuscarAluno(int codigo);

Recebe o código do aluno via parâmetro e retorna o índice dele na lista de alunos. Se não encontrar o código do aluno na lista, o método deve retornar o valor -1.

void RegistrarFalta(int index);

Adiciona uma falta na quantidade de faltas do aluno indicado pelo índice fornecido no parâmetro do método. Se o índice for inválido deve ser lançada uma exceção. Para este método pode ser criada uma exceção específica ou utilizada uma exceção já existente no Java.

void AtribuirNota(int índex, double nota);


Atribui uma nota para o aluno indicado pelo índice no parâmetro. Se o índice for inválido deve ser lançada a mesma exceção que no método anterior. A nota só pode ser um valor entre 1 e 10 (inclusive). Qualquer outro valor deve ser ignorado pelo método.

void ListarAlunos();

Lista todos os alunos na saída padrão. A listagem deve incluir o código, o nome, a nota final e a quantidade de faltas de cada aluno. No topo da listagem imprima os dados da turma.

O método main da aplicação deve testar todos os métodos acima incluindo pelo menos 3 alunos no sistema.

Poderiam me ajudar a criar os métodos conforme especificações de cada um?

9 Respostas

P

mostre o que vc ja fez

F

Se você está começando em Java, não tente pular diretamente para a Orientação a Objetos. Se você já sabe algumas noções de OO, então você não está tão iniciante em Java.

Mostre o que já fez e qual sua dúvida para que nós te ajudamos.

H

eu criei as classes, a interface e os métodos na interface. Fiz a classe turma implementar a interface. Porém não estou entendendo uma coisa. Na prova pede pra classe turma implementar os métodos. Mas eu achava que era só a classe principal que se construía os métodos. Minha dúvida é: Devo implementar na classe turmas ou no main?

D

Tudo que é método de Turma, implementa em Turma. O que é de Main, implementa no Main.

P

Mano, para pra pensar um pouco.

Orientação a Objetos.

Objetos são o que? Estruturas de dados.

Os objetos fazem o que ? interagem entre si.

Como? via métodos.

Vc pode simplesmente declarar seus objetos como sendo apenas estruturas de dados e toda a logica dentro de um grande e vultoso metodo main, portanto vc esta programando de forma estruturada assim. Toda e qualquer vantagem da OO vai embora pelo ralo.

não digo q é errado. eu digo que OO tem justamente muito mais potencial. quando vc estuda encapsulamento vc descobre que o estado interno dos seus objetos podem ser protegidos.

isso te traz diversas vantangens. primero vc tem encapsulamento do estado interno. alem disso vc esta pegando o que existe na natureza, nos negocios, no mundo real e esta criando uma representação no codigo.

Por exemplo, um professor pode reprovar um aluno!

Professor p = new Professor("Joel, o Cruel");
Aluno a = new Aluno("heycarlitos");

p.reprova(a);

perceba que vc não sabe NADA sobre o professor ou aluno. só save q o professor pode reprovar alguem. pq o professor é sadico.

pense nos objetos e nas suas relações. como eles interagem no fim das contas?

eis a sua resposta.

H

Obrigado pelo exemplo citado. Já deu uma clareada. O main eu só chamo o método que está em outra classe…

H

Estou com um problema:
Na classe Turmas, preciso limitar a criação de 20 alunos por turma, então eu fiz um array e um if pra lançar uma exception:

Alunos[] aluno;

public void incluirAluno(int codigo, String nome) throws AlunoException {

	if (aluno.length + 1 > 20) {
		throw new AlunoException("Numero maximo de alunos atingidos");

	}

Está correto?

E outra dúvida, no meu método main, fui incluir alunos através do métro incluirAluno, porém deu erro:

public static void main(String[] args) {

Turmas t1 = new Turmas();

	t1.incluirAluno(1, "Pedro");
	t1.incluirAluno(2, "Joca");
	t1.incluirAluno(3, "Fedido");
	t1.incluirAluno(5, "Jeremias");

Por que da nullPointerException?

D

Se você criou um vetor de 20 posições, sempre que você fizer a chamada a aluno.length vai ter 20, mesmo que não tenha nenhuma posição preenchida.
O ideal é colocar um contador e verificar quantos alunos já foram inseridos.

public class Turma { //Nome de classe, em geral, é singular
    private int contaAlunos = 0;
}

E, a cada aluno inserido, valida e, caso não tenha 20, incrementa

if(20 > contaAluno) {
     //Dispara a mensagem de erro
} else {
    contaAlunos++;
}
P

vamos la

aluno.length + 1 > 20

se aluno é um array, então fazer essa comparação é totalmente sem sentido.

arrays em java tem tamanho fixo. logo a propriedade length sera sempre constante.

veja o exemplo do Darlan. eu não sei se chamaria contaAlunos, mas este atributo funciona bem tanto como quantidade como armazenar o proximo indice a ser utilizado para armazenar algo.

eu faria

if( contaAluno < 20 ) {
   aluno[ contaAluno ] = new Aluno( ... );
   contaAluno++;
} else {
  // não deu...
}
Criado 1 de outubro de 2018
Ultima resposta 3 de out. de 2018
Respostas 9
Participantes 4