Sugestão melhoria do código

4 respostas Resolvido
javaprogramação
N

Olá Pessoal!

Alguma sugestão para melhorar este código?

public static void main(String[] args) {

int [] horariosDeChegada = {-3, -2, 1, 0, 1, -2, 3, -1, 0, 5 };		
	
	double qtdAlunos = 0; {
	for (double i = 0; i < horariosDeChegada.length; i ++) 
		 qtdAlunos ++;			 
	}
	
	@SuppressWarnings("unused")
	double noHorario = 0; {
	for (double b: horariosDeChegada) 
		if( b >= 0) 
	    noHorario ++; 
	}
						        
	double atrasados2 = 0;
	for (double c: horariosDeChegada) {
		if( c < 0) 
		atrasados2 ++;		   
	}	

	double qtd1 = (qtdAlunos);
	double qtd2 = (atrasados2);
	double percentual = qtd2 / qtd1;		
				
	if(percentual > 0.3) {
		System.out.println("Aula Cancelada!!!");
		} else {
			System.out.println("Aula Normal");
		}			
}

}

Neal

4 Respostas

H

Aqui poderia ser simplesmente:

int qtdAlunos = horariosDeChegada.length;

Aliás, para que essa { depois de declarar a variável? Não faz sentido abrir um novo bloco aí.

E os contadores podem ser incrementandos no mesmo loop:

int noHorario = 0, atrasados = 0;
for (int horario : horariosDeChegada) { // <-- o array é de int, então use int na variável "horario" também
    if (horario >= 0) {
        noHorario++;
    } else {
        atrasados++;
    }
}

Se bem que você não está usando a variável noHorario para nada, mas enfim…

E repare que os contadores podem ser int, você só precisa converter para double na hora de fazer o cálculo:

double percentual = (double) atrasados / qtdAlunos;

Ou seja, ficaria assim:

int[] horariosDeChegada = {-3, -2, 1, 0, 1, -2, 3, -1, 0, 5};
int qtdAlunos = horariosDeChegada.length;
int noHorario = 0, atrasados = 0;
for (int horario : horariosDeChegada) {
    if (horario >= 0) {
        noHorario++;
    } else {
        atrasados++;
    }
}
double percentual = (double) atrasados / qtdAlunos;
if (percentual > 0.3) {
    System.out.println("Aula Cancelada!!!");
} else {
    System.out.println("Aula Normal");
}

Mas se não for usar a variável noHorario, pode removê-la. A quantidade de alunos também me parece redundante (a não ser para deixar o código mais claro, mas dependendo do que for fazer, talvez não precise dela também). E na verdade nem o percentual precisaria (a menos que você vá usar esse valor depois, mas se for só para usar no if e em nenhum outro lugar, poderia remover também).

Ou seja, também poderia ser:

int[] horariosDeChegada = {-3, -2, 1, 0, 1, -2, 3, -1, 0, 5};
int atrasados = 0;
for (int horario : horariosDeChegada) {
    if (horario < 0) {
        atrasados++;
    }
}
if ((double) atrasados / horariosDeChegada.length > 0.3) {
    System.out.println("Aula Cancelada!!!");
} else {
    System.out.println("Aula Normal");
}

Obviamente que código menor não é necessariamente melhor. Ao eliminar a variável percentual, pode ser que não fique tão claro o que o cálculo quer dizer, e aí valeria a pena ter esta variável (e ainda mudar o nome para percentualAtrasados, por exemplo, para deixar mais claro o que ela significa).

N

Obrigado pela sugestão!!!
Tentei rodar aqui mas está dando um erro de sintax na variável atrasados, eu tentei acrescentar uma chave porém ao rodar não imprime nada.

Neal

H
Solucao aceita

Aqui não deu erro nenhum, então vou dar outra dica: toda vez que vc menciona que algo não funcionou ou “deu erro”, tem que colocar o código completo e a mensagem de erro, senão a gente não tem como adivinhar o que está acontecendo.

Eu sugiro que crie uma classe nova, do zero, que tem somente este código - algo assim ← veja que aqui funciona.

Enfim, se deu erro, provavelmente está em alguma outra parte do código, ou tem algum outro detalhe que vc fez aí, e que eu não tenho como adivinhar.

N

perfeito amigão, tudo certo! foi falha minha na hora de rodar aqui.

Brigadão pela ajuda!!!

Neal

Criado 28 de abril de 2022
Ultima resposta 30 de abr. de 2022
Respostas 4
Participantes 2