Codigo para calcular, media de três provas

15 respostas
MartinsAndreDablio

como simplificar esse codigo…

import javax.swing.JOptionPane;//biblioteca necessaria para trazer as caixas  de dialogo
class avaliacao
{
 public static void main(String args[])
 {
  float prova1, prova2, prova3, media;

    prova1 = Float.parseFloat(JOptionPane.showInputDialog("Digite a primeira nota"));
     prova2  = Float.parseFloat(JOptionPane.showInputDialog("Digite a segnda nota"));
       prova3 = Float.parseFloat(JOptionPane.showInputDialog("Digite a terceira nota"));


  prova1 = prova1 * 2 / 10;
  prova2 = prova2 * 3 / 10;
  prova3 = prova3 * 5 / 10;

  media = prova1 + prova2 + prova3;

  if(media >= 7) {
         JOptionPane.showMessageDialog(null, "sua media é = "+media+" voce foi aprovado");
     }
  else if(media >= 4) {
         JOptionPane.showMessageDialog(null, "sua media é = "+media+" você esta de recuperação");
     }
  else {
         JOptionPane.showMessageDialog(null, "você foi reprovado "+ media);
     }

 }
}

15 Respostas

Arthur_F_Ferreira

Há várias formas de simplificar esse código. Você conhece arrays (vetores) e/ou listas em Java? Tente tirar do método main o cálculo da média e passe para outro método criado por você. Exemplo:

public double calculaMedia(ListaOuVetor notas) {
    // Aqui vc vai percorrer o vetor ou a lista, calcular e retornar a média.
}
MartinsAndreDablio

Conheço sim, mas de qualquer forma teremos que ter 3 entradas.

War_Paz
package Test;

import javax.swing.JOptionPane;

public class Maine{
	
	public static void main(String args[]) {  
		float media;
		
		float provas[] = new float[3];
  
		provas[0] = Float.parseFloat(JOptionPane.showInputDialog("Digite a primeira nota"));  
		provas[1]  = Float.parseFloat(JOptionPane.showInputDialog("Digite a segunda nota"));  
		provas[2] = Float.parseFloat(JOptionPane.showInputDialog("Digite a terceira nota"));  

		media = (provas[0] * 2 / 10) + (provas[1] * 3 / 10) + (provas[2] * 5 / 10);	// Aqui
  
		if(media>=4){		// E aqui, embora o número de linhas permaneça o mesmo, acho que fica mais "bonito" assim
			if(media>=7){
				JOptionPane.showMessageDialog(null, "Sua media é = "+media+", você foi aprovado");
			}else{
				JOptionPane.showMessageDialog(null, "Sua media é = "+media+", você esta de recuperação");
			}
		}else{
			JOptionPane.showMessageDialog(null, "Você foi reprovado. Média: "+ media);
		}
	}  
}

Edit: Não curto muito Arrays, prefiro Listas, mas já que é algo tão pequeno...

Arthur_F_Ferreira

Não necessariamente. Ao ler do dialog, ao invés de você jogar numa variável, basta vc jogar no array ou na lista. Isso vai facilitar o cálculo da sua média porque você pode se basear no tamanho da lista automaticamente ou na quantidade de registros do vetor.

ViniGodoy
  1. Declare as variáveis quando for usa-las. Java não é C, não há necessidade de declarar tudo no início do método;
  2. Você pode deixar a conta toda numa linha só;
  3. Dá para simplificar um pouco se você separar o texto do resultado da exibição da média.
import javax.swing.JOptionPane;
// nome de classes com letra maiúscula.
//Além disso, pela convenção de código do Java, chaves ficam na linha de cima.
public class Avaliacao {
    //Faça indentação do código corretamente 
    public static void main(String args[]) {
        // nomes descritivos. A variável representam notas, não provas.
        float nota1 = Float.parseFloat(JOptionPane.showInputDialog("Digite a primeira nota"));
        float nota2  = Float.parseFloat(JOptionPane.showInputDialog("Digite a segunda nota"));
        float nota3 = Float.parseFloat(JOptionPane.showInputDialog("Digite a terceira nota"));

        //Evite mudar o significado da variável no meio do caminho
        float media = (nota1 * 2 + nota2 * 3 + nota3 * 5) / 10;

        String resultado;
        if(media >= 7) {
            resultado = "voce foi aprovado";
        } else if(media >= 4) {
            resultado = "você esta de recuperação";
        } else {
            resultado = "você foi reprovado ";
        }
        JOptionPane.showMessageDialog(null, "Sua média foi: " + media + ". " + resultado);
    }
}
MartinsAndreDablio

Vini obrigado pela sua explicação, realmente com essa organização fica muito melhor.

ViniGodoy
Com arrays poderia ficar assim:
import javax.swing.JOptionPane;

public class Avaliacao {
    public static void main(String args[]) {
        float pesos[] = {2.0f, 3.0f, 5.0f};
        float somaPesos = 0;
        float somaNotas = 0;

        float notas[] = new float[pesos.length];
        for (int i = 0; i < pesos.length; i++) {
            notas[i] = Float.parseFloat(JOptionPane.showInputDialog("Digite a " + i + "ª nota"));
            somaNotas += notas[i] * pesos[i];
            somaPesos += pesos[i];
        }

        //Evite mudar o significado da variável no meio do caminho
        float media = somaNotas / somaPesos;

        String resultado;
        if(media >= 7) {
            resultado = "Você foi aprovado.";
        } else if(media >= 4) {
            resultado = "Você esta de recuperação.";
        } else {
            resultado = "Você foi reprovado.";
        }
        JOptionPane.showMessageDialog(null, "Sua média foi: " + media + ". " + resultado);
    }
}

Parece um pouco mais complicado, mas observe que agora para termos mais provas, bastaria alterar o array de pesos.

MartinsAndreDablio

fiz esse só que não entra na condição,

import javax.swing.JOptionPane;
class avaliacao
{
 public static void main(String args[])
 {
   float nota[] = new float[3];

    nota[1] = Float.parseFloat(JOptionPane.showInputDialog("Digite a primeira nota"));
    nota[2]  = Float.parseFloat(JOptionPane.showInputDialog("Digite a segnda nota"));
    nota[3] = Float.parseFloat(JOptionPane.showInputDialog("Digite a terceira nota"));
    
    float media = (((nota[1] * 2) / 10) + ((nota[2] * 3) / 10) + ((nota[3] * 5) / 10));

  if(media >= 7) {
         JOptionPane.showMessageDialog(null, "sua media é = "+media+" voce foi aprovado");
     }
  else if(media >= 4) {
         JOptionPane.showMessageDialog(null, "sua media é = "+media+" você esta de recuperação");
     }
  else {
         JOptionPane.showMessageDialog(null, "você foi reprovado "+ media);
     }
 }
}

o que eu posso mehorar nele…

ViniGodoy

Os índices dos arrays começam em 0.

MartinsAndreDablio

Pronto agora acho que melhorei meu codigo bastante.

import javax.swing.JOptionPane;
class avaliacao
{

 public static void main(String args[])
 {
   String condicao = "";
   float nota[] = new float[3];

    nota[0] = Float.parseFloat(JOptionPane.showInputDialog("Digite a primeira nota"));
    nota[1]  = Float.parseFloat(JOptionPane.showInputDialog("Digite a segnda nota"));
    nota[2] = Float.parseFloat(JOptionPane.showInputDialog("Digite a terceira nota"));
    
    float media = (((nota[0] * 2) / 10) + ((nota[1] * 3) / 10) + ((nota[2] * 5) / 10));

  if(media >= 7) {
         condicao = "aprovado";
     }
  else if(media >= 4) {
         condicao = "Recuperação";
     }
  else {
         condicao = "Reprovado";
     }
        JOptionPane.showMessageDialog(null, "você foi " +condicao+ " . Sua nota foi "+media);
 }
}

Muito Obrigado.

ViniGodoy

A indentação continua errada, assim como o nome da classe.
Há parênteses demais na sua expressão, o que mais atrapalha do que ajuda.

Você continua declarando variáveis no começo do método, baixa a variável condição para perto do if.

A palavra “segunda” está escrita sem “u”.

MartinsAndreDablio

acho que ainda peco muito na endentação.

import javax.swing.JOptionPane;

public class avaliacao
{
 public static void main(String args[])
 {        
   float nota[] = new float[3];
         nota[0] = Float.parseFloat(JOptionPane.showInputDialog("Digite a primeira nota"));
         nota[1]  = Float.parseFloat(JOptionPane.showInputDialog("Digite a segunda nota"));
         nota[2] = Float.parseFloat(JOptionPane.showInputDialog("Digite a terceira nota"));
   float media = (nota[0] * 2 / 10 + nota[1] * 3 / 10 + nota[2] * 5 / 10);
   
   String resultado = "";
   if(media >= 7) {
         resultado = "aprovado";
   } else if(media >= 4) {
         resultado = "Recuperação";
   } else {
         resultado = "Reprovado";
     }
   JOptionPane.showMessageDialog(null, "você foi " +resultado+ " . Sua nota foi "+media);
 }
}

Corrige ai pra mim por favor.

ViniGodoy

O que "tá dentro" tem que ir para frente.

import javax.swing.JOptionPane;

//Nome da classe começa com letra maiúscula!
public class Avaliacao {
    //Esse método está dentro da classe
    public static void main(String args[]) {        
        //Esse código está dentro do método
        float nota[] = new float[3];
        nota[0] = Float.parseFloat(JOptionPane.showInputDialog("Digite a primeira nota"));
        nota[1] = Float.parseFloat(JOptionPane.showInputDialog("Digite a segunda nota"));
        nota[2] = Float.parseFloat(JOptionPane.showInputDialog("Digite a terceira nota"));
        float media = (nota[0] * 2 + nota[1] * 3 + nota[2] * 5) / 10;
   
        String resultado;
        if(media >= 7) {
            resultado = "Aprovado";
        } else if(media >= 4) {
            resultado = "Recuperação";
        } else {
            resultado = "Reprovado";
        }
        JOptionPane.showMessageDialog(null, "Você foi " +resultado+ ". Sua nota foi "+media + ".");
    }
}
MartinsAndreDablio

Agora sim sempre o que está dentro irá pra frente, obrigado pelas dicas.

import javax.swing.JOptionPane;

public class avaliacao {
   public static void main(String args[]){        
        float nota[] = new float[3];
        nota[0] = Float.parseFloat(JOptionPane.showInputDialog("Digite a primeira nota"));
        nota[1]  = Float.parseFloat(JOptionPane.showInputDialog("Digite a segunda nota"));
        nota[2] = Float.parseFloat(JOptionPane.showInputDialog("Digite a terceira nota"));
        float media = (nota[0] * 2 / 10 + nota[1] * 3 / 10 + nota[2] * 5 / 10);

        String resultado;
        if(media >= 7) {
            resultado = "aprovado";
        } else if(media >= 4) {
            resultado = "Recuperação";
        } else {
            resultado = "Reprovado";
          }
        JOptionPane.showMessageDialog(null, "você foi " +resultado+ " . Sua nota foi "+media);
      }
    }

valeu grande abraço.

ViniGodoy

E por que você insiste em deixar o nome da classe com letra minúscula? Há uma convenção do Java dizendo especificamente o contrário:
http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html

Criado 27 de janeiro de 2013
Ultima resposta 27 de jan. de 2013
Respostas 15
Participantes 4