Você está aqui: Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arquivos e Diretórios

Como ler e gravar arquivos texto com campos de tamanho fixo em Java - Nomes e notas de alunos aprovados e reprovados - Exercícios Resolvidos de Java

Quantidade de visualizações: 439 vezes
Pergunta/Tarefa:

O arquivo usado neste exercício pode ser baixado aqui.

Dado um arquivo notas_alunos.txt com o seguinte conteúdo:

ANA SANTOS             8,3   7,9
ANDRE MIRANDA         10,0   8,4
CINTIA NUNES           6,2   5,8
FABRICIO SILVA         3,6   6,2
GABRIELA KARLA         8,3  10,0
JOAO DOS SANTOS        6,8   6,3
MILENA FERNANDA       10,0   8,1
Este arquivo contém os nomes de 7 alunos e suas notas N1 e N2. Note que este arquivo possui campos de tamanhos fixos. O campo nome possui o tamanho de 20 caracteres e os campos das notas possuem o tamanho de 6 caracteres cada. O campo nome está alinhado à esquerda enquanto as notas estão alinhadas à direita.

Escreva um programa Java que abra este arquivo e gere outros dois arquivos, com os nomes notas_alunos_aprovados.txt e notas_alunos_reprovados.txt.

O arquivo notas_alunos_aprovados.txt deverá conter os alunos aprovados e o arquivo notas_alunos_reprovados.txt vai conter os alunos reprovados. Para ser aprovado a média aritmética das notas N1 e N2 deverá ser maior ou igual a 7,0. Os arquivos gerados deverão conter um campo com tamanho de 6 caracteres dedicado à média do aluno, alinhada à direita.

Para deixar a explicação do exercício ainda mais assertiva, veja o conteúdo do arquivo notas_alunos_aprovados.txt gerado pela resolução que fizemos:

ANA SANTOS             8,3   7,9   8,1
ANDRE MIRANDA         10,0   8,4   9,2
GABRIELA KARLA         8,3  10,0   9,2
MILENA FERNANDA       10,0   8,1   9,1
E aqui está o conteúdo do arquivo notas_alunos_reprovados.txt:

CINTIA NUNES           6,2   5,8   6,0
FABRICIO SILVA         3,6   6,2   4,9
JOAO DOS SANTOS        6,8   6,3   6,6
Como observação adicional, veja que as notas possuem vírgulas, e não pontos. Seu código deverá levar isso em conta na hora de efetuar os cálculos.

Resposta/Solução:

Veja a resolução comentada deste exercício em Java:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package estudos;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Estudos {
  public static void main(String[] args) {
    // vamos construir uma instância da classe BufferedReader
    // para ler o arquivo de entrada
    BufferedReader arquivo_notas_alunos = null;
    // vamos construir uma instância da classe BufferedWriter
    // para escrever no arquivo de aprovados
    BufferedWriter arquivo_aprovados = null;
    // vamos construir uma instância da classe BufferedWriter
    // para escrever no arquivo de reprovados
    BufferedWriter arquivo_reprovados = null;
    
    // nomes e locais dos arquivos
    String notas_alunos = "C:\\estudos_java\\notas_alunos.txt";
    String alunos_aprovados = "C:\\estudos_java\\notas_alunos_aprovados.txt";
    String alunos_reprovados = "C:\\estudos_java\\notas_alunos_reprovados.txt";
    
    // vamos ler o conteúdo do arquivo de entrada, uma linha
    // de cada vez
    String linha;
    try {
      // agora abrimos o arquivo de entrada
      arquivo_notas_alunos = new BufferedReader(new FileReader(notas_alunos));
      // abrimos também o arquivo de saída alunos aprovados
      arquivo_aprovados = new BufferedWriter(new FileWriter(alunos_aprovados));
      // e também o arquivo de saída alunos reprovados
      arquivo_reprovados = new BufferedWriter(new FileWriter(alunos_reprovados));
      
      // enquanto houver linhas a serem lidas
      while((linha = arquivo_notas_alunos.readLine()) != null){
        // agora precisamos tratar os campos do arquivo
        // o campo nome contém 20 caracteres
        String nome = linha.substring(0, 22);
        // o campo N1 contém 6 caracteres
        // precisamos retirar os espaços deste campo e trocar a vírgula
        // pelo ponto
        String n1_string = linha.substring(22, 26);
        double n1 = Double.parseDouble(n1_string.trim().replace(",", "."));
        // o campo N2 contém 6 caracteres
        // precisamos retirar os espaços deste campo e trocar a vírgula
        // pelo ponto
        String n2_string = linha.substring(26, 32);
        double n2 = Double.parseDouble(n2_string.trim().replace(",", "."));
        
        // agora vamos calcular a média do aluno
        double media = (n1 + n2) / 2;
        // precisamos configurar a string da média
        String media_string = String.format("%1$,6.1f", media);
        // o aluno foi aprovado?
        if(media >= 7.0){
          // vamos escrever no arquivo de aprovados
          arquivo_aprovados.write(nome + n1_string + 
            n2_string + media_string + "\r\n");
        }
        else{
          // vamos escrever no arquivo de reprovados
          arquivo_reprovados.write(nome + n1_string + 
            n2_string + media_string + "\r\n");
        }
      }
      
      // fecha o arquivo de saída dos reprovados
      arquivo_reprovados.close();
      // fecha o arquivo de saída dos aprovados
      arquivo_aprovados.close();
      // fecha o arquivo de entrada
      arquivo_notas_alunos.close();
      
      // mostra uma mensagem de sucesso
      System.out.println("Arquivos gerados com sucesso.");
    } 
    catch (FileNotFoundException e) {
      System.err.println("\nArquivo não encontrado\n");
    }
    catch (IOException e) {
      System.err.println("\nNão foi possível abrir o arquivo\n");
    }
  }
}


Link para compartilhar na Internet ou com seus amigos:

Java ::: Fundamentos da Linguagem ::: Tipos de Dados

Apostila Java para iniciantes - Como usar o tipo de dados referência em seus códigos Java

Quantidade de visualizações: 11477 vezes
O Java contém 8 tipos de dados primitivos e um tipo referência. No entanto, poucos livros dedicam exemplos a este último tipo. Vamos começar analisando o trecho de código abaixo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

public class Estudos{
  public static void main(String args[]){
    String nome = "Osmar J. Silva";  

    System.out.println(nome);    

    System.exit(0);
  }
}

Se observarmos este código, veremos que a variável nome não é um tipo primitivo e sim uma referência. Desta forma, qualquer variável ou constante que não seja do tipo primitivo é uma referência a um objeto de uma classe, interface, etc. Arrays não são tipos primitivos também. Assim, variáveis ou constantes que apontam para arrays (vetores e matrizes) também são referências.

É importante entender bem a noção de referências, visto que é por meio delas que acessamos um determinado objeto na memória. Além disso, como objetos e arrays são sempre passados por referência aos métodos Java, fica fácil entender como várias referências podem apontar para o mesmo objeto ao mesmo tempo. E, caso você tenha esquecido, os tipos primitivos nunca são passados por referêcia aos métodos. Em vez disso, eles são passados por valor (o que quer dizer que uma alteração nos argumentos fornecidos ao métodos não altera a cópia original da variável).


Java ::: Desafios e Lista de Exercícios Resolvidos ::: Matemática e Estatística

Exercício Resolvido de Java - Como simplificar frações em Java

Quantidade de visualizações: 660 vezes
Pergunta/Tarefa:

Simplificar uma fração consiste em reduzir o numerador e o denominador por meio da divisão pelo máximo divisor comum aos dois números. Uma fração está totalmente simplificada quando verificamos que seus termos estão totalmente reduzidos a números que não possuem termos divisíveis entre si. Uma fração simplificada sofre alteração do numerador e do denominador, mas seu valor matemático não é alterado, pois a fração, quando tem seus termos reduzidos, torna-se uma fração equivalente.

Escreva um programa Java que pede para o usuário informar o numerador e o denominador de uma fração e mostre a fração simplificada. Use uma classe Fracao para a operação de simplificação. Em outras seções do nosso site você encontra o cálculo do MDC para encontrar o Máximo Divisor Comum.

Sua saída deverá ser parecida com:

Informe o numerador: 32
Informe o denominador: 40
A fração gerada foi: 32/40
A fração simplificada é: 4/5
Resposta/Solução:

Veja a resolução comentada deste exercício em Java:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package estudos;

import java.util.Scanner;
  
public class Estudos{
  public static void main(String[] args) {
    // para ler a entrada do usuário
    Scanner entrada = new Scanner(System.in);
    
    // vamos pedir para o usuário informar o numerador
    System.out.print("Informe o numerador: ");
    int numerador = Integer.parseInt(entrada.nextLine());
    
    // vamos pedir para o usuário informar o denominador
    System.out.print("Informe o denominador: ");
    int denominador = Integer.parseInt(entrada.nextLine());
    
    // vamos criar um objeto da classe Fracao
    Fracao f = new Fracao(numerador, denominador);
    
    // vamos mostrar a fração gerada
    System.out.println("A fração gerada foi: " + f.toString());
    
    // agora vamos simplificar esta fração
    System.out.println("A fração simplificada é: " +
      f.simplificar().toString());
  }
}

// classe usada para representar uma Fração
class Fracao{
  int numerador;
  int denominador;

  // construtor da classe 
  public Fracao(int numerador, int denominador) {
    this.numerador = numerador;
    this.denominador = denominador;
  }

  // método que simplifica a fração atual e retorna o
  // resultado como uma fração
  public Fracao simplificar(){
    // cria uma fração temporária
    Fracao temp = new Fracao(this.numerador, this.denominador);
    
    // descobrimos que é maior, o numerador ou o
    // denominador
    int n = temp.numerador, d = temp.denominador, maior;
    
    // o numerador é menor que 0?
    if (temp.numerador < 0) {
      n = -temp.numerador;
    }
    
    // descobrimos o maior
    if (n > d) {
      maior = n;
    } 
    else {
      maior = d;
    }
 
    // encontramos o maior número que divide o numerador e o
    // denominador
    int mdc = 0;
    for (int i = maior; i >= 2; i--) {
      if ((temp.numerador % i == 0) && (temp.denominador % i == 0)) {
        mdc = i;
        break;
      }
    }
 
    // agora dividimos tanto o numerador quanto o denominador
    // pelo mdc encontrado    
    if (mdc != 0) {
      temp.numerador = temp.numerador / mdc;
      temp.denominador = temp.denominador / mdc;
    }
    
    // retorna a fração temporária
    return temp;
  }
  
  // retorna uma representação textual dessa fração
  @Override
  public String toString() {
    return this.numerador + "/" + this.denominador; 
  }
}



Java ::: Desafios e Lista de Exercícios Resolvidos ::: Java Básico

Exercícios Resolvidos de Java - Um programa Java que pede ao usuário que informe seu nome e exiba uma mensagem de boas-vindas

Quantidade de visualizações: 15576 vezes
Pergunta/Tarefa:

Escreva um programa Java que pede ao usuário que informe seu nome e exiba uma mensagem de boas-vindas. Se o usuário informar "Osmar J. Silva" seu programa deverá exibir a mensagem:

Seja bem-vindo(a), Osmar J. Silva

Faça duas versões do exercício. Na primeira você deverá usar a classe Scanner para efetuar a leitura e System.out.println() para exibir a saída. Na segunda versão você deverá usar os métodos showInputDialog() e showMessageDialog() da classe JOptionPane (presente no pacote javax.swing).

Resposta/Solução:

Vamos primeiro à resolução do exercício usando a classe Scanner para efetuar a leitura e System.out.println() para exibir a saída:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

public static void main(String[] args){
  // não se esqueça de adicionar um import para a classe Scanner
  // import java.util.Scanner;

  // vamos criar um objeto da classe Scanner
  Scanner entrada = new Scanner(System.in);

  // vamos solicitar ao usuário que informe seu nome
  System.out.print("Informe seu nome: ");
  
  // vamos ler o nome informado
  String nome = entrada.nextLine();

  // agora vamos exibir a mensagem de boas-vindas
  System.out.println("Seja bem-vinda(a), " + nome);
}

Agora veja a resolução usando os métodos showInputDialog() e showMessageDialog() da classe JOptionPane:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

public static void main(String[] args){
  // não se esqueça de adicionar um import para a classe JOptionPane
  // import javax.swing.JOptionPane;
    
  // vamos solicitar ao usuário que informe seu nome
  String nome = JOptionPane.showInputDialog(null, "Informe seu nome");

  // agora vamos exibir a mensagem de boas-vindas
  JOptionPane.showMessageDialog(null, "Seja bem-vinda(a), " + nome);
}



Mais Desafios de Programação e Exercícios e Algoritmos Resolvidos de Java

Veja mais Dicas e truques de Java

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 76 usuários muito felizes estudando em nosso site.