Evitar uso constante de If

11 respostas
Dojs

Ae galera to chegando agora e nunca fui muito afim de aprender JAVA vou ser sincero, mas como necessito dele na facu pra passar de ano to me desdobrando pra aprender…

Bem a minha dúvida é a seguinte, como faço para evitar a utilização de diversos if:

  • Se nota informada maior que 10 fixar como 10;
  • Se nota informada menor que 0 fixar como 0;
if(n1&lt0)

n1=0;

if(n2&lt0)

n2=0;

if(n3&lt0)

n3=0;

if(n4&lt0)

n4=0;

if(n1&gt10)

n1=10;

if(n2&gt10)

n2=10;

if(n3&gt10)

n3=10;

if(n4&gt10)

n4=10;

Fiz tudo isso e acho que deve ter um jeito mais simples de ser feito para não ficar tão longo o programa

Alguém pode me ajudar?

11 Respostas

Pedrosa

Utilize os operadores lógicos ||(ou) e &&(e) .

Ex:

if(n1 > 10  || n2 > 10)
n = 10;
francislon

Como vc está iniciando no GUJ leia isto:
http://www.guj.com.br/posts/list/50115.java

Em relação aos seus IFs, isso que vc fez não é aceito em java:

if(n2&lt0)

O certo seria:

if( n2 &lt 0)

Pra otimizar seu codigo vc pode usar vetores no lugar de variaveis excessivas, e utilizar o "Switch" que é um comando de multipla seleção.
:slight_smile:

Sami_Koivu

Olá,

Você poderia tentar utilizar esses dois métodos para se livrar dos ifs.

Math.max

Math.min

[]s,
Sami

Dojs

ele ta escrito como (n1 &lt 0) porém quando eu mandei enviar ficou daquele formato

francislon

Tranquilo Dojs.

Dojs

Pedrosa,

o código dai ficaria assim mesmo ou já caguei em cima novamente?

<blockquote>if (n1 &gt 10 || n2 &gt 10 || n3 &gt 10 || n4 &gt 10)
		nota1 = nota2 = nota3 = nota4 = 10;
	if (n1 &lt 0 || n2 &lt 0 || n3 &lt 0 || n4 &lt 0)
		nota1 = nota2 = nota3 = nota4 = 0;</blockquote>
1112

Espere um pouco, deixe eu ver se entendi o que você precisa. Você precisa normalizar as notas para que elas fiquem obrigatoriamente entre 0 e 10, é isso? Se for isso, essa segunda solução que você postou não atende (se o aluno ficar com 3 no primeiro, segundo e terceiro bimestres, mas aparecer um erro e ficar com 11 no quarto, todos os bimestres terão nota 10).

Se for o caso que eu entendi, você poderia fazer o seguinte:

nota1 = nota1 < 0 ? 0 : (nota1 > 10 ? 10 : nota1);
nota2 = nota2 < 0 ? 0 : (nota2 > 10 ? 10 : nota2);
nota3 = nota3 < 0 ? 0 : (nota3 > 10 ? 10 : nota3);
nota4 = nota4 < 0 ? 0 : (nota4 > 10 ? 10 : nota4);

Na prática, você está fazendo todos os if do primeiro post, mas o código ficou mais enxuto.

Você também pode fazer um método para validar a nota e usá-lo:

private double notaValida(double nota){
   return nota <  0 ? 0 : (nota > 10 ? 10 : nota);
}
Dojs

No final de tudo ainda terei que postar a média das notas dos 4 Bimestres entende, o prof passou um calculo meio louco tipo

Por isso tenho que entender como fazer para aquelas notas entrarem após a entrada dos dados se adequarem a esses parâmetros.

Sami_Koivu

#@®®¡$:

private double notaValida(double nota){ return nota < 0 ? 0 : (nota > 10 ? 10 : nota); }

Só pra explicar melhor meu post anterior, a sugestão era fazer algo assim:

private double notaValida(double nota){
   return Math.min(10, Math.max(0, nota));
}

Funciona para se livrar do If, mas confesso que a intenção do código fica confusa.

Dojs

Bem confusa viu…

mas beleza vou continuar me quebrando aqui pra descobrir como fazer uma média prática pro programa

Valew

ViniGodoy

Uma outra forma é você pesquisar sobre arrays e utiliza-los.

Aí você precisará ter apenas uma variável para a nota e fazer várias comparações através de um for.

Basicamente, o array é uma variável que contém diversos valores, associados a um índice. Em português, também chamamos esse assunto de vetores. Por exemplo:

int[] notas = new int[10]; //Criamos um array para 10 notas

if (notas[0] &lt 0)  //Testamos se a primeira nota é menor que zero

A vantagem disso é que o índice pode ser expresso por uma variável, e então, utilizada num for.

O código abaixo testa a condição para todas as 10 notas.
for (int i = 0; i &lt notas.length; i++) { 
   if (notas[i] &lt 0)                          
      notas[i] = 0;
   if (notas[i] &gt 10)
      notas[i] = 10;
}

Note que para você testar 1000 notas, bastaria alterar o tamanho do array.

Criado 6 de março de 2007
Ultima resposta 6 de mar. de 2007
Respostas 11
Participantes 6