While não funciona - java

Bloco de Citação<… String nome_aluno = new String[50];
double notas_aluno = new double[5];

     // pra que declarar o j aqui em cima se ele só faz parte do for que tem lá embaixo?

    boolean opcao = false; // tem que inicializar com true dentro do laço 'do-while'
    String resp;    
    
    Scanner sc = new Scanner(System.in);

    do 
    {
        
         // essas duas variáveis aqui podem ser declaradas dentro do while
        double media = 0, soma = 0; 
        int j = 0;
        notas_aluno[j] = 0;
        
        for (int i = 0; i < nome_aluno.length; i++) 
        {
        
            System.out.println("Insira o nome do aluno: ");
            nome_aluno[i] = sc.nextLine(); // usa sc.nextLine()
            //soma = 0;
            
               for (j = 0; j < notas_aluno.length; j++) // porque 4 ? usa o notas_aluno.length
                {
                    System.out.println("Entre com a " + (j + 1) + " ª nota do aluno: " + (i + 1));
                    notas_aluno[j] = sc.nextDouble();
                    //notas_aluno[j] = Double.parseDouble(sc.nextLine()); // usa Double.parseDouble(sc.nextLine())
                    soma = soma + notas_aluno[j];
                }

                media = soma / 5; // pq 5 ? usa o notas_aluno.length

                String aproveitamento = "";
                if (media >= 9 && media <= 10) {
                    aproveitamento = "A";
                } else if (media >= 7.5 && media < 9) { // não precisa testar se é < 9
                    aproveitamento = "B";
                } else if (media >= 6 && media < 7.5) { // não precisa testar se é < 7.5
                    aproveitamento = "C";
                } else if (media >= 4 && media < 6) { // não precisa testar se é < 6
                    aproveitamento = "D";
                } else if (media >= 0 && media < 4) { // não precisa testar se é < 4
                    aproveitamento = "E";
                }

                System.out.println("Média: " + media);
                System.out.println("Conceito: " + aproveitamento);

                switch (aproveitamento) 
                {
                    case "A":
                    case "B":
                    case "C":
                        System.out.println("APROVADO");
                        break;
                    case "D":
                    case "E":
                        System.out.println("REPROVADO");
                        break;
                }                    
                      
        System.out.print("Deseja Continuar? <s/n>: ");
        resp = sc.nextLine(); // usa sc.nextLine()
        if (resp.equalsIgnoreCase("n"))
            opcao = true;
        } 
        
    }while (!opcao); 

String resp;
boolean opcao = false;
Scanner sc = new Scanner(System.in);

do
    {        
    System.out.print("Deseja Continuar? <s/n>: ");
    resp = sc.nextLine();            
    //} while (!opcao.equalsIgnoreCase(resp)); //while ( opcao != 'n'); // só pára se for == 'n'    
        if(resp.equalsIgnoreCase("n"))
        {
            opcao = true;
            System.out.println("Saiu!");
            //break;
        }
    }while(!opcao);  ...>

Prazer a todos. Interessante, seu eu tirar o código entre o d{ e a pergunta para sair, o while funciona perfeitamente, porém se eu retorno como o código para ler as notas e calcular o while não funciona para quando tiver menos de 50 alunos. Não consigo encontrar o erro. Obrigado.