Olá pessoal, gostaria de poder receber uma ajuda resolvendo esse exercício. Já resolvi até a terceira pergunta mas não consegui a partir daí

Mostra o que fizeste e onde tens dúvidas. Colocar um enunciado e esperar que alguem resolva dificilmente vai resultar.

import java.util.Scanner;

public class CompeticaoSalto {

    private static String[] nomesAtletas;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int quantidadeAtletas = obterQuantidadeAtletas(scanner);

        nomesAtletas = obterNomesAtletas(scanner, quantidadeAtletas);
        double[][] saltosAtletas = obterSaltosAtletas(scanner, quantidadeAtletas);

        // 2. Mostrar a distância total saltada por todos os atletas
        double distanciaTotal = calcularDistanciaTotal(saltosAtletas);
        System.out.println("2. distância total saltada:");
        System.out.printf("total = %.1f cm\n", distanciaTotal);

        // 3. Mostrar a maior distância conseguida em cada um dos três saltos de todos os atletas
        double[] maioresDistancias = encontrarMaioresDistancias(saltosAtletas);
        System.out.println("3. maior distância global de cada salto:");
        for (int i = 0; i < maioresDistancias.length; i++) {
            System.out.printf("<salto%d> = %.1f cm\n", i + 1, maioresDistancias[i]);
        }

        scanner.close();
    }

    private static int obterQuantidadeAtletas(Scanner scanner) {
        System.out.print("Informe a quantidade de atletas: ");
        return scanner.nextInt();
    }

    private static String[] obterNomesAtletas(Scanner scanner, int quantidadeAtletas) {
        scanner.nextLine();
        String[] nomesAtletas = new String[quantidadeAtletas];
        for (int i = 0; i < quantidadeAtletas; i++) {
            System.out.print("Informe o nome do atleta " + (i + 1) + ": ");
            nomesAtletas[i] = scanner.nextLine();
        }
        return nomesAtletas;
    }

    private static double[][] obterSaltosAtletas(Scanner scanner, int quantidadeAtletas) {
        double[][] saltosAtletas = new double[quantidadeAtletas][3];
        for (int i = 0; i < quantidadeAtletas; i++) {
            for (int j = 0; j < 3; j++) {
                System.out.printf("Informe a distância do salto %d (em metros) para %s: ", j + 1, nomesAtletas[i]);
                saltosAtletas[i][j] = scanner.nextDouble();
            }
        }
        return saltosAtletas;
    }

    private static double calcularDistanciaTotal(double[][] saltosAtletas) {
        double distanciaTotal = 0;
        for (double[] saltos : saltosAtletas) {
            for (double salto : saltos) {
                distanciaTotal += salto;
            }
        }
        return distanciaTotal;
    }

    private static double[] encontrarMaioresDistancias(double[][] saltosAtletas) {
        double[] maioresDistancias = new double[3];
        for (int i = 0; i < 3; i++) {
            double maiorDistancia = Double.MIN_VALUE;
            for (double[] saltos : saltosAtletas) {
                if (saltos[i] > maiorDistancia) {
                    maiorDistancia = saltos[i];
                }
            }
            maioresDistancias[i] = maiorDistancia;
        }
        return maioresDistancias;
    }
}

Estou meio sem ideias para as próximas alíneas

Então, para o ponto 4 tens de encontrar, na tua matriz de saltos, que posições tem todos os saltos = 0, e obter o nome correspondente da lista de nomes.
Para o ponto 5 tens de fazer semelhante ao ponto 2, mas ter 3 somas em vez de uma e, no final, dividir pelo número total de atletas.

Notas:

  • Não aprenderam POO? Usar arrays em vez de objectos pode tornar-se mais dificil de entender e programar
  • Muitas vezes neste tipo de exercícios o input está num ficheiro e o output é comparado com outro ficheiro. Não sei se é o caso mas, se for, não deves fazer qualquer printf a pedir informação nem qualquer output que não sejam os pretendidos.

Infelizmente não aprendemos, como é que isso poderia facilitar?

Está aprendendo Java sem ser orientado à objetos?
Não faz sentido

Hoje você tem um array com os nomes dos atletas e uma matriz com os saltos dos atletas
Você poderia ter uma lista de Informacao com objetos da classe abaixo:

class Informacao {

    String nomeAtleta;
    double salto1;
    double salto2;
    double salto3;
}

Ficaria bem mais simples.

1 curtida

Ok, percebi. Então nesse caso depois de criar o array, eu crio essa classe com objetos e faço o printf?

package primeiro_arremesso;
import java.util.ArrayList;
import java.util.Scanner;

public class Primeiro_arremessoComArray {

public static void main(String[] args) {
    Scanner leia = new Scanner (System.in);
    
    System.out.println("Informe a quantidade de atletas: ");
    int quantAtletas = leia.nextInt();
    String[] nomeAtleta = new String [quantAtletas];
    int[][] saltos = new int[quantAtletas][3];
    for(int i=0;i<quantAtletas;i++){
        
        System.out.println("informe o nome do atleta");
            nomeAtleta[i]=leia.next();
        for(int a=0;a<3;a++){ 
            int e=a+1;
            System.out.println("Informe "+e+"º o salto do atleta "+nomeAtleta[i]+":");
                saltos[i][a] = leia.nextInt();
          
        }
     
        
    }
    
    for(int x=0;x<quantAtletas;x++){
        
        int maiorValor=0;
        
        ArrayList<String> atletaComMaiorSalto=new ArrayList<>();
        for(int i = 0;i<saltos.length;i++){
            for(int j : saltos[i]){
                if(j>maiorValor){
                    maiorValor=j;
                    atletaComMaiorSalto.clear();
                    atletaComMaiorSalto.add(nomeAtleta[i]);
                }else if(j==maiorValor){
                    atletaComMaiorSalto.add(nomeAtleta[i]);
                }
                
            }
        }
        System.out.println("----------------------------------------------");
        System.out.println("Atleta com o maior salto: "+atletaComMaiorSalto);
        int totalAtleta=saltos.length;
        int numeroSaltos=saltos[0].length;
        for(int salto=0;salto<numeroSaltos;salto++){
            int tentativasValidas=0;
            for(int atleta=0;atleta<totalAtleta;atleta++){
                int valorSalto = saltos[atleta][salto];
                if(valorSalto != 0){
                    tentativasValidas++;
                }
            }
            double percentagemValida=(tentativasValidas/(double)totalAtleta)*100;
            System.out.println("Percentagem de tentativas válidas no salto "+(salto+1)+": "+percentagemValida+"%");
            
        }
        for(int salto=0;salto<numeroSaltos;salto++){
            int maiorDistancia=Integer.MIN_VALUE;
            for(int atleta=0;atleta <totalAtleta;atleta++){
                int valorSalto=saltos[atleta][salto];
                if (valorSalto>maiorDistancia){
                    maiorDistancia=valorSalto;
                }
            }
            System.out.println("Maior Distância no salto "+(salto+1)+": "+maiorDistancia);
        }
        int totalDistanciasValidas=0;
        double somaDistanciasValidas=0;
        for(int atleta=0;atleta<totalAtleta;atleta++){
            for(int salto=0;salto <numeroSaltos;salto++){
                int valorSalto=saltos[atleta][salto];
                if(valorSalto!=0){
                    somaDistanciasValidas+=valorSalto;
                    totalDistanciasValidas++;
                }
            }
        }
        if(totalDistanciasValidas>0){
            double mediaDistanciasValidas=somaDistanciasValidas/totalDistanciasValidas;
            System.out.println("Distância média dos saltos válidos na competição: "+mediaDistanciasValidas);
        }else{
            System.out.println("Nenhum salto válido encontrado.");
        }
        
        for(int salto=0;salto<numeroSaltos;salto++){
            int somaDistancias=0;
            for(int atleta=0;atleta<totalAtleta;atleta++){
                int valorSalto = saltos[atleta][salto];
                somaDistancias+=valorSalto;
            }
            double mediaDistancias=somaDistancias/(double)totalAtleta;
            System.out.println("Distancia media no salto "+(salto+1)+": "+mediaDistancias);
        }
        
        
        
        int saltoTot=(saltos[x][0]+saltos[x][1]+saltos[x][2]);
        System.out.printf(nomeAtleta[x]+":");
        System.out.printf("| "+saltos[x][0]);
        System.out.printf("| "+saltos[x][1]);
        System.out.printf("| "+saltos[x][2]);
        System.out.println("| Salto total: "+saltoTot);
        System.out.println("----------------------------------------------");
        
        if(saltos[x][0] ==0 && saltos[x][1]==0 && saltos[x][2]==0){
            System.out.println("Participante sem saltos válidos: "+nomeAtleta[x]);
            
        }
        
        
        
    }
    
 
}

}

Podem verificar por favor, não sei porque não funciona

O que não funciona?
Qual o erro?

Escrevi o código mas não está a compilar, não acho o erro.

Se não compila então tem erro de compilação, qual é o erro?