Codigo para calcular, media de três provas

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);
     }

 }
}

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

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

[code]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);
	}
}  

} [/code]

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

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.

  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;
//Dê 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[]) {
        //Dê 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);
    }
}

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

Com arrays poderia ficar assim:

[code]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);
}

}
[/code]

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

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…

Os índices dos arrays começam em 0.

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.

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

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.

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

[code]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 + ".");
}

}[/code]

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.

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