Dúvida com empilhamento em Java

Olá! Estou atualmente estudando estrutura de dados (pilha especificamente) e estou fazendo um programa que lê algumas notas de alunos e então os coloca em duas pilhas diferentes: aprovado ou reprovado. No final, eu tenho que desempilhar isso e mostrar todos os alunos, dizendo seus nomes, suas médias e se foram reprovados e aprovados.

import java.util.Scanner;

public class Pilha {

    public Object[] pilha;
    public int posicaoPilha;

    public Pilha() {
        this.posicaoPilha = -1;
        // indica que esta nula, vazia, pois posição um indica que contém informação
        this.pilha = new Object[1000];
        // criando uma pilha com 1000 posições
    }

    public boolean pilhaVazia() {
        // isEmpty
        if (this.posicaoPilha == -1) {
            return true;
        }
        return false;
    }

    public int tamanho() {
        // is
        if (this.pilhaVazia()) {
            return 0;
        }
        return this.posicaoPilha + 1;
    }

    public Object exibeUltimoValor() {
        // top
        if (this.pilhaVazia()) {
            return null;
        }
        return this.pilha[this.posicaoPilha];
    }

    public Object desempilhar() {
        // pop
        if (pilhaVazia()) {
            return null;
        }
        return this.pilha[this.posicaoPilha--];
    }

    public void empilhar(Object valor) {
        // push
        if (this.posicaoPilha < this.pilha.length - 1) {
            this.pilha[++posicaoPilha] = valor;
        }
    }

    public static void main(String args[]) {
        Pilha aprovados = new Pilha();
        Pilha reprovados = new Pilha();
        Scanner scan = new Scanner(System.in);

        String[] aluno = new String[3];
        double[][] notas = new double[3][3];
        int soma = 0, media;
        int contAlunos = 0, contNotas = 0;

        // Obtém Nome e Notas
        do {
            System.out.print("nome");
            aluno[contAlunos] = scan.nextLine();
            while (contNotas < 3) {
                System.out.print("Nota " + (contNotas + 1) + ": ");
                notas[contAlunos][contNotas] = new Scanner(System.in).nextDouble();
                contNotas++;
            }
            contNotas = 0;
            contAlunos++;
        } while (contAlunos < aluno.length);
        // Mostra Relatório
        for (int i = 0; i < aluno.length; i++) {
            System.out.println("\nAluno: " + aluno[i]);
            while (contNotas < 3) {
                System.out.println("Notas: " + notas[i][contNotas]);
                soma += notas[i][contNotas];
                contNotas++;
            }
            media = soma / 3;
            System.out.println("Média: " + media);
            contNotas = 0;
            soma = 0;

            if (media > 60) {
                System.out.printf("o aluno %s foi aprovado com a média  %d", aluno[i], media);
                aprovados.empilhar(media);

            } else {
                System.out.printf("o aluno %s foi reprovado com a média  %d", aluno[i], media);
                reprovados.empilhar(media);

            }
        }
        System.out.println("Desempilhando todos os aprovados ");

        while (aprovados.pilhaVazia() == false) {
            System.out.println("aprovados: " + aprovados.desempilhar());
        }
        System.out.println("Desempilhando todos os reprovados");

        while (reprovados.pilhaVazia() == false) {
            System.out.printf("reprovados: " + reprovados.desempilhar());
        }
    }
}

O código está funcionando até certo ponto, pois ali no final quando a função de desempilhar é executada, eu preciso de algo como uma lista (como acho que é atualmente mesmo) mas mostrando o aluno, sua média e a pilha em que ele pertence (reprovado ou aprovado). O problema está que eu não consigo fazer isso pois não consigo acessar a variável “alunos[i]” pra poder mostrar o nome do aluno junto com sua média ali. Desculpe se não consegui explicar bem, se precisarem de mais informações só dizer…

Amigo, sugiro alterar o design de suas classes:

  • altere o nome da classe para Aplicacao ou outra coisa.
  • Crie a classe Aluno com seus atributos correspondentes.
  • Dentro da Aplicaco.java crie duas pilhas do Aluno pilhaAprovado e pilhaReprovado.

Aí é só criar os métodos q precisas.

Percebi que você copiou a parte de pilhas do site da Devmedia e parece não conseguir criar a classe Aluno, então não tem muito o que fazer, o jeito é relaxar e deixar pro próximo semestre ou caso tenha percebido que não gosta de programação, ir procurando outro curso.