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…