2
respostas

Divisão por Zero

Exercício 1: Tratamento de ArithmeticException

// Exercicio1TryCatch.java
import java.util.InputMismatchException;
import java.util.Scanner;

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

        try {
            System.out.print("Digite o primeiro número: ");
            double numero1 = scanner.nextDouble();

            System.out.print("Digite o segundo número (divisor): ");
            double numero2 = scanner.nextDouble();

            double resultado = numero1 / numero2;
            System.out.println("Resultado da divisão: " + resultado);

        } catch (ArithmeticException e) {
            // Captura a exceção de divisão por zero
            System.err.println("Erro: Não é possível dividir por zero. " + e.getMessage());
        } catch (InputMismatchException e) {
            // Captura a exceção caso o usuário digite algo que não seja um número
            System.err.println("Erro: Entrada inválida. Por favor, digite apenas números. " + e.getMessage());
        } finally {
            // Opcional: bloco finally é executado sempre, independentemente de exceção
            scanner.close(); // Garante que o Scanner seja fechado
        }
    }
}

Exercício 2: Exceção Personalizada SenhaInvalidaException

  1. Crie a classe de exceção personalizada SenhaInvalidaException:

Java

// SenhaInvalidaException.java
public class SenhaInvalidaException extends Exception {
    public SenhaInvalidaException(String message) {
        super(message);
    }
}
  1. Crie o programa principal para verificar a senha:

Java

// Exercicio2Senha.java
import java.util.Scanner;

public class Exercicio2Senha {

    public static void verificarSenha(String senha) throws SenhaInvalidaException {
        if (senha == null || senha.length() < 8) {
            throw new SenhaInvalidaException("A senha deve ter pelo menos 8 caracteres.");
        }
        System.out.println("Senha válida!");
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Digite uma senha (mínimo 8 caracteres): ");
        String senhaDigitada = scanner.nextLine();

        try {
            verificarSenha(senhaDigitada);
        } catch (SenhaInvalidaException e) {
            System.err.println("Erro de senha: " + e.getMessage());
        } finally {
            scanner.close();
        }
    }
}

Exercício 3: Consulta a API GitHub com Exceção Personalizada

  1. Crie a classe de exceção personalizada ErroConsultaGitHubException:

Java

/```
/ ErroConsultaGitHubException.java
public class ErroConsultaGitHubException extends RuntimeException {
    public ErroConsultaGitHubException(String message) {
        super(message);
    }

    public ErroConsultaGitHubException(String message, Throwable cause) {
        super(message, cause);
    }
}
2 respostas
  1. Crie o programa principal para consultar a API:
// Exercicio3GitHub.java
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;

// Adicione a biblioteca Gson para este exercício se ainda não tiver:
// import com.google.gson.Gson;
// import com.google.gson.JsonObject;

public class Exercicio3GitHub {

    // Record para representar dados básicos do usuário GitHub (pode ser mais completo)
    public record UsuarioGitHub(String login, String name, String html_url) {}

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Digite o nome de usuário do GitHub para consultar: ");
        String username = scanner.nextLine();

        try {
            // Construindo a URL da API do GitHub
            String url = "https://api.github.com/users/" + username;

            // Criando um cliente HTTP
            HttpClient client = HttpClient.newHttpClient();

            // Criando a requisição GET
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create(url))
                    .build();

            // Enviando a requisição e recebendo a resposta
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

            // Verificando o status da resposta
            if (response.statusCode() == 404) {
                throw new ErroConsultaGitHubException("Usuário do GitHub '" + username + "' não encontrado.");
            } else if (response.statusCode() != 200) {
                throw new ErroConsultaGitHubException("Erro ao consultar a API do GitHub. Status: " + response.statusCode());
            }

            // Se chegou aqui, a consulta foi bem-sucedida (status 200)
            String jsonResponse = response.body();

            // Opcional: Usar Gson para parsear o JSON para um objeto Java
            // Se você não tiver Gson, pode simplesmente imprimir o JSON.
            // Gson gson = new Gson();
            // UsuarioGitHub usuario = gson.fromJson(jsonResponse, UsuarioGitHub.class);
            // System.out.println("\nInformações do Usuário GitHub:");
            // System.out.println("Login: " + usuario.login());
            // System.out.println("Nome: " + (usuario.name() != null ? usuario.name() : "Não informado"));
            // System.out.println("URL do Perfil: " + usuario.html_url());

            System.out.println("\nInformações do Usuário GitHub (JSON):");
            System.out.println(jsonResponse); // Imprime o JSON completo

        } catch (ErroConsultaGitHubException e) {
            // Tratamento específico da exceção personalizada
            System.err.println("Erro na consulta GitHub: " + e.getMessage());
        } catch (IOException | InterruptedException e) {
            // Tratamento de erros de rede ou interrupção
            System.err.println("Erro de rede ou operação interrompida: " + e.getMessage());
            e.printStackTrace(); // Para depuração
        } finally {
            scanner.close();
        }
    }
}

Oi, Daiane! Como vai?

Achei muito interessante como você implementou diferentes tipos de tratamento de exceções, especialmente criando exceções personalizadas. Isso demonstra um ótimo domínio do tema e uma preocupação com a clareza das mensagens de erro.

Uma dica interessante para o futuro é usar o método scanner.hasNextDouble() antes de ler um número com nextDouble(). Assim, você evita a exceção InputMismatchException de forma preventiva. Veja este exemplo:


Scanner scanner = new Scanner(System.in);
System.out.print("Digite um número: ");
if(scanner.hasNextDouble()){
    double numero = scanner.nextDouble();
    System.out.println("Numero digitado: " + numero);
} else {
    System.out.println("Entrada invalida.");
}
scanner.close();

Esse código verifica se a entrada é um número antes de tentar ler, evitando erros desnecessários.

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