Oii, André! Tudo bem?
Parabéns por finalizar o desafio do Conversor de Moedas! É muito legal ver que você já está dominando o uso de Records, a biblioteca Gson e o novo HttpClient do Java. Seu código está funcional, e isso é o mais importante no começo!
Você comentou sobre a "gambiarra" e o problema com o switch. Fique tranquilo, isso é super comum. Vou te explicar o que aconteceu e dar algumas dicas para deixar seu código ainda mais profissional ("Clean Code").
1. O mistério do Switch Case
O comportamento estranho que você notou (onde ele passava por todas as opções) acontece porque, no modelo clássico do switch, o Java continua executando as linhas de baixo a não ser que você mande ele parar. Faltou apenas o comando break; ao final de cada case.
Porém, como você está usando uma versão mais nova do Java, você pode usar o Switch Expression (com a setinha ->), que é mais moderno e não precisa de break. Olha como fica mais limpo:
switch (opcao) {
case 1 -> moedasUsadas = "USD/ARS";
case 2 -> moedasUsadas = "ARS/USD";
case 3 -> moedasUsadas = "USD/BRL";
case 4 -> moedasUsadas = "BRL/USD";
case 5 -> moedasUsadas = "USD/EUR";
case 6 -> moedasUsadas = "EUR/USD";
case 7 -> {
moedasUsadas = "";
System.out.println("Programa finalizado");
}
default -> System.out.println("Entrada inválida");
}
2. Nomes de métodos vs. construtores
Notei na classe Requisicao o seguinte trecho:
public void Requisicao() throws ...
Quando usamos o mesmo nome da classe, o Java entende como um Construtor (aquele método chamado ao criar o new Requisicao()). Porém, ao colocar o void, ele vira um método comum. Isso pode gerar confusão.
Sugestão: Que tal renomear esse método para deixar claro o que ele faz? Algo como public void exibirMenu() ou public void iniciar().
Espero que essas dicas ajudem a clarear suas dúvidas. Você mandou muito bem na implementação da API!
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!