1
resposta

[Projeto] Desafio: bloco try/catch para o tratamento adequado de exceptions

1)

import java.util.Scanner;

public class ExercicioDivisao {
    public static void main(String[] args) {
        Scanner leitura = new Scanner(System.in);

        System.out.println("Digite um numerador: ");
        int numero = leitura.nextInt();

        System.out.println("Digite o denominador: ");
        int denominador = leitura.nextInt();
        
       try {
           int resultado = numero/denominador;
           System.out.println("Resultado da divisão: " + resultado);
       }catch (ArithmeticException e) {
           System.out.println("Erro: Divisão por zero não permitida." + e.getMessage());

       }
    }
}

2)

import exception.SenhaInvalidaException;

import java.util.Scanner;

public class ExercicioSenha {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("Digite sua senha: ");
        String senha = scanner.nextLine();

        try {
            validarSenha(senha);
            System.out.println("Senha válida. Acesso permitido. ");
        } catch (SenhaInvalidaException e) {
            System.out.println("Erro: " + e.getMessage());
        }

    }
    private static void validarSenha(String senha) {
        if (senha.length() < 8) {
            throw new SenhaInvalidaException("A senha deve ter pelo menos 8 caracteres.");
        }
    }
}
package exception;

public class SenhaInvalidaException extends RuntimeException {
    public SenhaInvalidaException(String mensagem) {
        super(mensagem);
    }
}

3)

package exception;

public class ErroConsultaGitHubException extends RuntimeException {
    public ErroConsultaGitHubException(String mensagem) {
        super(mensagem);
    }
}
import com.google.gson.annotations.SerializedName;

public record UsuarioGithub(
        String login,
        @SerializedName("name")
        String nome,
        String bio) {
}
import exception.ErroConsultaGitHubException;

public class Usuario {
    private String login;
    private String nome;
    private String bio;

    public Usuario(UsuarioGithub meuUsuarioGithub) {
        this.login = meuUsuarioGithub.login();
        this.nome = meuUsuarioGithub.nome();
        this.bio = meuUsuarioGithub.bio();
    }

    @Override
    public String toString() {
        return "Usuario{" +
                "login='" + login + '\'' +
                ", nome='" + nome + '\'' +
                ", bio='" + bio + '\'' +
                '}';
    }
}
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import exception.ErroConsultaGitHubException;

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Scanner;

public class ConsultaGithub {
    public static void main(String[] args) throws IOException, InterruptedException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Digite o nome para consulta: ");
        var busca = scanner.nextLine();
        //var resultado = URLEncoder.encode(busca, StandardCharsets.UTF_8);

        String endereco = "https://api.github.com/users/" + busca;

        try {

            HttpClient client = HttpClient.newHttpClient();
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create(endereco))
                    .build();

            HttpResponse<String> response = client
                    .send(request, HttpResponse.BodyHandlers.ofString());
            if (response.statusCode() == 404) {
                throw new ErroConsultaGitHubException("Usuário não encontrado no GitHub!");
            }

            String json = response.body();
            System.out.println(json);

            Gson gson = new Gson();
            
            UsuarioGithub meuUsuarioGithub = gson.fromJson(json, UsuarioGithub.class);
            
            Usuario meuUsuario = new Usuario(meuUsuarioGithub);
            System.out.println(meuUsuario);

            // Adicione aqui o código para processar o JSON e exibir as informações desejadas
        }  catch (IOException | InterruptedException e) {
            System.out.println("Opss… Houve um erro durante a consulta à API do GitHub.");
            e.printStackTrace();
        } catch (ErroConsultaGitHubException e) {
            System.out.println(e.getMessage());
        }

    }


}
1 resposta

Oi, Smalley! Como vai?

Agradeço por compartilhar.

Gostei de ver como você organizou os três exercícios, usando try/catch de forma progressiva: primeiro no tratamento de divisão por zero, depois com a exceção personalizada SenhaInvalidaException e, por fim, na consulta à API do GitHub com a ErroConsultaGitHubException. Isso mostra um bom entendimento de como tratar cenários diferentes e deixar o código mais claro e preparado para erros.

Você pode usar o método hasNextInt() antes de ler valores com Scanner, pois isso ajuda a evitar entradas inválidas.


Scanner leitura = new Scanner(System.in);

if (leitura.hasNextInt()) {
    int numero = leitura.nextInt();
    System.out.println(numero);
} else {
    System.out.println("valor invalido");
}

Nesse código, hasNextInt() verifica se a entrada é um número inteiro antes da leitura, evitando falhas na execução.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!