4
respostas

[Desafio: hora da prática] Está correto?

1 - Crie um programa simples que solicita dois números ao usuário e realiza a divisão do primeiro pelo segundo. Utilize o bloco try/catch para tratar a exceção que pode ocorrer caso o usuário informe 0 como divisor.

package Challanges03.exercise01;
import java.util.Scanner;

public class Service {
    Scanner scanner = new Scanner(System.in);

    //variables
    private int number = scanner.nextInt();
    private int divider = scanner.nextInt();

    public int calculate () {
        int finalResult = number / divider;
        System.out.println("The number '" + number + "' was divided by '" + divider + "' " +
                "and the result is: '" + finalResult + "'");
        return finalResult;
    }
}
package Challanges03.exercise01;

public class Main {
    public static void main(String[] args) {
        var service = new Service();

        try {
            service.calculate();
        } catch (ArithmeticException message) {
            System.out.println("The number can't be divided by zero!");
        }
    }
}
Saída esperada (cenário bom):
10
5
The number '10' was divided by '5' and the result is: '2'
///////////////////////////////////////////////////////////////
Saída esperada (cenário ruim):
3
0
The number can't be divided by zero!

2 - Crie um programa que lê uma senha do usuário. Utilize o bloco try/catch para capturar a exceção SenhaInvalidaException, uma classe de exceção personalizada que deve ser lançada caso a senha não atenda a critérios específicos (por exemplo, ter pelo menos 8 caracteres).

package Challanges03.exercise02;

public class InvalidPasswordException extends RuntimeException {

    public InvalidPasswordException(String message) {
        super(message);
    }
}
package Challanges03.exercise02;
import java.util.Scanner;

public class Service {
    public void createPassword() {
        System.out.println("Type your password");

        Scanner scanner = new Scanner(System.in);
        String password = scanner.next();

        if (password.length() < 8) {
            throw new InvalidPasswordException("Password must be at least 8 characters");
        }

        System.out.println("Your password is: '" +password+ "'");
    }
}
package Challanges03.exercise02;

public class Main {
    public static void main(String[] args) {
        var test = new Service();

        try {
            test.createPassword();
        } catch (InvalidPasswordException exception) {
            System.out.println("Error: " +exception.getMessage());
        }
    }
}
Saída esperada (cenário bom):
Type your password
abc123abc
Your password is: 'abc123abc'
///////////////////////////////////////////////////////////////
Saída esperada (cenário ruim):
Type your password
abc123
Error: Password must be at least 8 characters
4 respostas

3 - Desenvolva um programa em Java que permite aos usuários consultar informações sobre um usuário do GitHub (utilize a API pública do GitHub para obter os dados). Crie uma classe de exceção personalizada, ErroConsultaGitHubException, que estende RuntimeException. Lance essa exceção quando o nome de usuário não for encontrado. No bloco catch, trate de forma específica essa exceção, exibindo uma mensagem amigável.

package Challanges03.exercise03;

public class GitHubExceptionQueryError extends RuntimeException{
    public GitHubExceptionQueryError(String message) {
        super(message);
    }
}
package Challanges03.exercise03;
import java.io.IOException;
import java.net.URI;
import java.net.http.*;
import java.util.Scanner;

public class Service {
    Scanner scanner = new Scanner(System.in);

    private String url = "https://api.github.com/users/";
    private String user = scanner.nextLine();

    public void Query() throws IOException, InterruptedException {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(url+user))
                .header("Accept", "application/vnd.github.v3+json")
                .build();
        HttpResponse<String> response = client
                .send(request, HttpResponse.BodyHandlers.ofString());

        if (response.statusCode() == 404) {
            throw new GitHubExceptionQueryError("Erro! Usuário não encontrado!");
        }

        System.out.println(response.body());
    }
}
package Challanges03.exercise03;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        var test = new Service();

        try {
            test.Query();
        } catch (IOException | InterruptedException exception) {
            System.out.println("Erro!");
            exception.printStackTrace();
        } catch (GitHubExceptionQueryError exceptionQueryError) {
            System.out.println(exceptionQueryError.getMessage());
        }
    }
}
Saída esperada (cenário bom):
LuizRossini1
{"login":"LuizRossini1","id":157657321,"node_id":"U_kgDOCWWo6Q","avatar_url"...
///////////////////////////////////////////////////////////////
Saída esperada (cenário ruim):
q0q0q0a03
Erro! Usuário não encontrado!

Olá Luiz! Tudo bem?

Seu código está bem estruturado e correto! É bem perceptível todo o cuidado que você teve durante o desenvolvimento dele, as classes estão bem simples e claras com o está sendo construído.

Continue mergulhando em tecnologia e se tiver dúvidas, conte com o fórum.

Abraços e bons estudos!

Bom dia, Armando! Pode me dizer o que faltou ou o que eu errei para o código ficar correto?

Boa tarde, Luiz! Joia?

Peço perdão que na minha primeira análise do seu código pensei ter visto alguns erros, mas é porque eu havia testado errado. Então como eu já tinha escrito o começo da mensagem antes de testar novamente, acabei esquecendo de retirar o "quase".

Fiz a edição do tópico acima retirando o erro.