Show the highest average of all calculated averages

Asked

Viewed 130 times

-1

I created an algorithm to calculate the average of a surfer, but he can take as many Ndar as he wants if he wants to stop the algorithm has to show the highest average of those calculated and move on to the second surfer. Does anyone know how I fix it?

import java.util.Scanner;
public class trabalhosurf {
  public static void main(String[]args) {
   int cod;
   double juiz1,juiz2,juiz3,juiz4,juiz5,soma,media1,media2,menor,maior,surfista1,surfista2,mediafinal1,mediafinal2;
   Scanner ler=new Scanner(System.in);
   do {

       System.out.println("Informe a nota do juiz 1 para o surfista 1");
    juiz1 = ler.nextDouble();
    menor = juiz1;
    maior = juiz1;
    System.out.println("Informe a nota do juiz 2 para o surfista 1");
    juiz2 = ler.nextDouble();
    if (juiz2<menor) {
     menor = juiz2;
     if (juiz2>maior) {
     maior=juiz2;
     }
    }
    System.out.println("Informe a nota do juiz 3 para o surfista 1");
    juiz3 = ler.nextDouble();
    if (juiz3<menor) {
     menor=juiz3;
     if(juiz3>maior) {
     maior=juiz3;
     }
    }
    System.out.println("Informe a nota do juiz 4 para o surfista 1");
    juiz4 = ler.nextDouble();
    if (juiz4<menor) {
      menor=juiz4;
      if (juiz4>maior) {
      maior=juiz4; 
      }
    }
    System.out.println("Informe a nota do juiz 5 para o surfista 1");
    juiz5 = ler.nextDouble();
    if (juiz5<menor) {
     menor=juiz5;
     if (juiz5>maior) {
     maior=juiz5; 
    }
    }
    soma = juiz1+juiz2+juiz3+juiz4+juiz5 - menor - maior;
    media1= soma/3;
    mediafinal1=media1;
    if
    (mediafinal1>media1);{
    mediafinal1=media1;
    }    
    System.out.println("Media da onda do surfista 1 :"+ mediafinal1);
    System.out.println("Deseja repetir o calculo da media do surfista 1?");
    System.out.println("1)sim");
    System.out.println("2)nao");
    cod=ler.nextInt();


   }while(cod!=2);
   System.out.println("Nota final do sufista 1 é " + mediafinal1 ); 
    int codl;

    do {
       System.out.println("Informe a nota do juiz 1 para o surfista 2");
    juiz1 = ler.nextDouble();
    menor = juiz1;
    maior = juiz1;
    System.out.println("Informe a nota do juiz 2 para o surfista 2");
    juiz2 = ler.nextDouble();
    if (juiz2<menor) {
     menor = juiz2;
     if (juiz2>maior) {
     maior=juiz2;
     }
    } 
    System.out.println("Informe a nota do juiz 3 para o surfista 2");
    juiz3 = ler.nextDouble();
    if (juiz3<menor) {
     menor=juiz3;
     if(juiz3>maior) {
     maior=juiz3;
     }
    }
    System.out.println("Informe a nota do juiz 4 para o surfista 2");
    juiz4 = ler.nextDouble();
    if (juiz4<menor) {
      menor=juiz4;
      if (juiz4>maior) {
      maior=juiz4; 
      }
    }
    System.out.println("Informe a nota do juiz 5 para o surfista 2");
    juiz5 = ler.nextDouble();
    if (juiz5<menor) {
     menor=juiz5;
     if (juiz5>maior) {
     maior=juiz5; 
    }
    }
    soma = juiz1+juiz2+juiz3+juiz4+juiz5 - menor - maior;
    media2 = (soma)/3;
    System.out.println("Media da onda do surfista 2 :"+ media2);
    System.out.println("Deseja calcular uma nova media para o surfista 2 ?");
    System.out.println("1)sim");
    System.out.println("2)nao");
    System.out.println("Nota final do sufista 2 é " + media2 ); 
    codl=ler.nextInt(); 
   }while(codl!=2);
    double campeao;



    {
    if (media1>media2) {
   campeao=media1;  
   System.out.println("O vencedor é surfista 1 com nota: "+ campeao);
    }else if (media1<media2){
   campeao=media2;  
   System.out.println("O vencedor é surfista 2 com nota: "+ campeao);
    }else if(media1==media2){
     System.out.println("empatados");
    } 


  }

 }
}
  • 3

    Fix what?

2 answers

1

Your main problem is this:

if (juiz3<menor) {
 menor=juiz3;
 if(juiz3>maior) {
 maior=juiz3;
 }
}

What you wanted is this:

if (juiz3 < menor) {
    menor = juiz3;
}
if (juiz3 > maior) {
    maior = juiz3;
}

I mean, it was to put a if after each other, not one inside the other.

Your code has a lot of duplicates, which is very bad. See the code below that eliminates them. Comments explain what the code does:

import java.util.Scanner;

public class TrabalhoSurf {

    public static void main(String[] args) {

        Scanner ler = new Scanner(System.in);
        int numeroJuizes = 5;
        int numeroSurfistas = 2;

        // Faz tudo isso uma vez para cada surfista.
        for (int surfista = 1; surfista <= numeroSurfistas; surfista++) {

            // Faz quantas vezes forem necessárias enquanto o usuário quiser repetir o cálculo da nota deste surfista.
            s: while (true) {

                // Utilizado para armazenar as notas dos juízes.
                double[] notas = new double[numeroJuizes];

                // Lê as notas dos juízes.
                for (int juiz = 1; juiz <= numeroJuizes; juiz++) {
                    System.out.println("Informe a nota do juiz " + juiz + " para o surfista " + surfista + ".");
                    notas[juiz - 1] = Double.parseDouble(ler.nextLine());
                }

                // Obtém a maior e a menor nota e também a soma das notas.
                double maior = notas[0];
                double menor = notas[0];
                double soma = notas[0];
                for (int juiz = 2; juiz <= numeroJuizes; juiz++) {
                     double nota = notas[juiz - 1];
                     if (nota > maior) maior = nota;
                     if (nota < menor) menor = nota;
                     soma += nota;
                }

                // Calcula a média, descartando a maior e a menor nota.
                double media = (soma - maior - menor) / (numeroJuizes - 2);

                // Mostra a média.
                System.out.println("Media da onda do surfista " + surfista + ": " + media);

                // Prende o usuário num loop até o usuário responder 1 ou 2.
                while (true) {
                    System.out.println("Deseja repetir o calculo da media do surfista " + surfista + "?");
                    System.out.println("1) Sim");
                    System.out.println("2) Nao");

                    // Lê a opção escolhida pelo usuário.
                    String escolha = ler.readLine();

                    if ("1".equals(escolha)) continue s; // Refaz com o mesmo surfista.
                    if ("2".equals(escolha)) break s; // Vai para o próximo surfista, se houver.

                    // Mostra a mensagem de erro. O while garante que o programa insiste.
                    System.out.println("Desculpe, não entendi a sua escolha. Tente novamente.");
                }
            }
        }
    }
}

Anyway, the secret is you always seek to eliminate copied-and-processed code. Use arrays to store sequences of numbers that have some meaning instead of creating a bunch of similar purpose variables.

0

If I understand correctly you just want to create a variable there double maior_media hence assigning:

if(media > maior_media) maior_media = media;

Print this when necessary and remember to reset the variable before the next interaction.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.