(5) Faça um programa que lê os dados de Aluno (nome, nota1, nota2 e média) salvos no arquivo “alunos.txt” e imprime na tela os dados do aluno com maior média. (Podem utilizar o arquivo gerado no exercício anterior).

Exemplo de entrada:

alunos.txt
5 Ana 9.99 .89 .85
Maria 9.0 7.08 .0
Bruno 8.5 6.5 7.5
Pedro 10.07 .58 .75
Carla 7.89 .98 .85
Exemplo de saída:
Nome: Ana
Nota 1: 9.9
Nota 2: 9.8
Média: 9.85

Passo 1

Resumo da questão: a gente tem um arquivo chamado “alunos.txt” que guarda, na primeira linha, o número de alunos e, nas linhas seguintes, o nome de cada aluno seguido de nota1, nota2 e média. O objetivo é ler esses dados e descobrir qual aluno tem a maior média, imprimindo o nome e as notas dele.
Conteúdo da matéria: manipulação de arquivos em Java (File e Scanner), estruturas de repetição (for), condicionais (if) e variáveis para controle.

Passo 2

Primeiro, a gente vai abrir o arquivo “alunos.txt” para leitura. Em Java, usamos a classe java.io.File junto com java.util.Scanner para isso. A ideia é:
  1. Criar um objeto File que aponta para “alunos.txt”.
  2. Criar um Scanner passando esse File como parâmetro.
  3. Ler a primeira informação do arquivo, que é o número inteiro de alunos.
    Isso exemplifica I/O de arquivo e o uso de Scanner para separar tokens (strings e números).

Passo 3

Agora, precisamos de variáveis para guardar os dados do “melhor” aluno conforme a gente vai lendo. Vamos criar:
  • String melhorNome = “”;
  • double melhorNota1 = 0, melhorNota2 = 0, melhorMedia = -1;
    Inicializamos melhorMedia com -1 para garantir que qualquer média lida (que é ≥ 0) seja maior na primeira comparação.

Passo 4

Aí entra a estrutura de repetição. Vamos usar um laço for (int i = 0; i < n; i++), onde n é o número de alunos que lemos no passo 2. Dentro desse laço, lemos:
  • String nome = sc.next();
  • double nota1 = sc.nextDouble();
  • double nota2 = sc.nextDouble();
  • double media = sc.nextDouble();
    Isso aplica o conceito de loop para processar múltiplas entradas de forma automática.

Passo 5

Para cada aluno lido, fazemos uma comparação:
if (media > melhorMedia) {
    melhorMedia = media;
    melhorNome  = nome;
    melhorNota1 = nota1;
    melhorNota2 = nota2;
}
Aqui usamos a estrutura condicional if para atualizar nossas variáveis de controle sempre que encontramos uma média maior que a anterior.

Passo 6

Depois que o for terminar, teremos em melhorNome, melhorNota1, melhorNota2 e melhorMedia os dados do aluno com maior média. Aí é só imprimir na tela usando System.out.println ou System.out.printf.

Resposta

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class MaiorMedia {
    public static void main(String[] args) {
        try {
            File file = new File("alunos.txt");
            Scanner sc = new Scanner(file);
            
            int n = sc.nextInt();  // lê o número de alunos
            
            String melhorNome = "";
            double melhorNota1 = 0, melhorNota2 = 0, melhorMedia = -1;
            
            for (int i = 0; i < n; i++) {
                String nome    = sc.next();
                double nota1   = sc.nextDouble();
                double nota2   = sc.nextDouble();
                double media   = sc.nextDouble();
                
                if (media > melhorMedia) {
                    melhorMedia = media;
                    melhorNome  = nome;
                    melhorNota1 = nota1;
                    melhorNota2 = nota2;
                }
            }
            sc.close();
            
            // Impressão do resultado
            System.out.println("Nome: "   + melhorNome);
            System.out.println("Nota 1: " + melhorNota1);
            System.out.println("Nota 2: " + melhorNota2);
            System.out.println("Média: "  + melhorMedia);
            
        } catch (FileNotFoundException e) {
            System.out.println("Arquivo não encontrado!");
        }
    }
}

Exercícios relacionados