Algoritmo matriz e vetor!

Faça uma classe em JAVA que carregue uma matriz com as notas de cinco alunos em três provas. Lembre-se que essa quantidade de alunos e provas é uma suposição e que sua classe poderia ser alterada para funcionar com números muito maiores.

Cada nota digitada deve ser validada e as notas válidas estão entre 0 e 10. Sempre que uma nota inválida for digitada uma nova digitação deve ser solicitada.

Carregue também um vetor com o tipo de média (A ? Aritmética e P ? Ponderada). Lembre-se que cada aluno terá um tipo de média e que os tipos digitados devem ser validados e os tipos válidos são: A, a, P, p. Sempre que um tipo inválido for digitado uma nova digitação deve ser solicitada. Os pesos da média ponderada são: 2, 3 e 10.

Mostre:

a) O número de cada aluno (nº da linha ou da coluna), a média e a situação (aprovado ou reprovado, considerando para aprovação média de no mínimo 7)
b) A média de todos os alunos juntos em cada prova
c) A maior nota de cada aluno e em que prova aconteceu, DESCONSIDERAR empates.
d) A menor nota em cada prova e a que aluno pertence, CONSIDERAR empates.

o exercicio é esse e o código que eu fiz é este?só que qd da a média de todos os alunos juntos em cada prova ele da errado o q eu fiz de errado alguém pode me ajudar?
obrigado!

[code]import java.util.Scanner;

public class exx3 {  
  
    public static void main(String[] args) {  
        final int NUMERO_DE_ALUNOS = 5;  
        double nota[][] = new double[NUMERO_DE_ALUNOS][3];  
        String tipoMedia[] = new String[NUMERO_DE_ALUNOS];  
        double media[] = new double[NUMERO_DE_ALUNOS];  
        double mediaProva = 0;  
        double maiorNota = 0;  
        double menorNota = 0;  
        String donoMaiorNota = null;  
        String donoMenorNota = null;  
  
  
        Scanner dado = new Scanner(System.in);  
  
        for (int i = 0; i < NUMERO_DE_ALUNOS; i++) {  
            System.out.println("digite as notas dos alunos" + (i + 1));  
            for (int j = 0; j < 3; j++) {  
                System.out.println("notas da prova " + (j + 1));  
                nota[i][j] = dado.nextDouble();  
                while (nota[i][j] > 10 || nota[i][j] < 0) {  
                    System.out.println("nota inválida");  
                    System.out.println("digite novamente");  
                    nota[i][j] = dado.nextDouble();  
                }  
                mediaProva = nota[i][j];  
                if (i == 0) {  
                    maiorNota = nota[i][j];  
                    menorNota = nota[i][j];  
                    donoMaiorNota = "" + (i + 1);  
                    donoMenorNota = "" + (i + 1);  
                } else {  
                    if (maiorNota < nota[i][j]) {  
                        maiorNota = nota[i][j];  
                        donoMaiorNota = "" + (i + 1);  
                    }  
                    if (menorNota > nota[i][j]) {  
                        menorNota = nota[i][j];  
                        donoMenorNota = "" + (i + 1);  
                    } else if (menorNota == nota[i][j]) {  
                        donoMenorNota = donoMenorNota + "empatou com " + (i + 1);  
                    }  
  
                }  
            }  
            do {  
                System.out.println("digite o tipo da média A-aritmédia e P-ponderada");  
                tipoMedia[i] = dado.next();  
            } while (!(tipoMedia[i].equalsIgnoreCase("p") || tipoMedia[i].equalsIgnoreCase("A")));  
  
            if (tipoMedia[i].equalsIgnoreCase("p")) {  
                media[i] = (nota[i][0] * 2 + nota[i][1] * 3 + nota[i][2] * 10) / 15;  
                System.out.println("a média foi " + media[i]);  
                System.out.println("media válida");  
            } else if (tipoMedia[i].equalsIgnoreCase("A")) {  
                media[i] = (nota[i][0] + nota[i][1] + nota[i][2]) / 3;  
                System.out.println("a média foi " + media[i]);  
            }  
  
            if (media[i] >= 7) {  
                System.out.println("aluno aprovado");  
            } else {  
                System.out.println("aluno reprovado");  
            }  
        }  
        System.out.println("\nDados das prova\n");  
        for (int i = 0; i < 3; i++) {  
            System.out.println("Media da prova "+(i+1)+" ="+ (mediaProva/NUMERO_DE_ALUNOS));  
            System.out.println("Maior nota da prova " + (i + 1) + " foi :" + maiorNota + " do aluno" + donoMaiorNota);  
            System.out.println("Menor nota da prova " + (i + 1) + " foi :" + menorNota + " do(s) aluno(s) " + donoMenorNota);  
        }  
    }  
}  [/code]

os dados da prova esta saindo errado o que eu fiz de errado? obrigado!