(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
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.
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 é:
- Criar um objeto File que aponta para “alunos.txt”.
- Criar um Scanner passando esse File como parâmetro.
- 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!");
}
}
}