Sugestão melhoria do código

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

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).

1 curtida

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

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.

1 curtida

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

Brigadão pela ajuda!!!

Neal