Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Practicando con Java: Challenge Conversor de Monedas Practicando con Java: Challenge Conversor de Monedas

Comparto mi solución un poco tarde pero funcional. Principal

import java.io.IOException;

public class Principal {
    public static void main(String[] args) throws IOException, InterruptedException {
        ConsultaAPI consultaAPI = new ConsultaAPI();
        CrearArchivo crearArchivo = new CrearArchivo();
        Menu menu = new Menu();
        int opcion = menu.obtenerOpcion();
        Double valorAConvertir = menu.obtenerValorAConvertir();
        String conversor = menu.tipoConversor(opcion);
        String[] monedas = conversor.split("/");
        String consultaJson = consultaAPI.obtenerDatos(conversor);
        Consulta consulta = crearArchivo.JsonToConsulta(consultaJson);
        crearArchivo.GuardarEnJson(consulta);
        double tasaDeConversion = consulta.conversion_rate();
        double valorCovertido = valorAConvertir * tasaDeConversion;
        System.out.println("El valor " + valorAConvertir + " " + monedas[0] + " al valor final de =>>> " + valorCovertido + " " + monedas[1]);
    }
}

ConsultaAPI

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

public class ConsultaAPI {
    private final HttpClient client = HttpClient.newHttpClient();
    public String obtenerDatos(String conversor) throws IOException, InterruptedException {
        String url = "https://v6.exchangerate-api.com/v6/b65e5067c7dba0040313e381/pair/" + conversor + "/";
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .header("User-Agent", "Java HttpClient")
                .build();

        HttpResponse<String> response = client.send(
                request,
                HttpResponse.BodyHandlers.ofString()
        );

        if (response.statusCode() != 200) {
            throw new RuntimeException("Error API: " + response.statusCode());
        }
        return response.body();
    }
}

CrearArchivo

import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonSyntaxException;

import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class CrearArchivo {
    List<Consulta> consultas = new ArrayList<>();
    private static final Gson gson = new GsonBuilder()
            .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
            .setPrettyPrinting()
            .create();

    public Consulta JsonToConsulta(String json) throws IOException {
        try {
            Consulta consulta = gson.fromJson(json, Consulta.class);
            return consulta;
        } catch (JsonSyntaxException e) {
            throw new RuntimeException("Error parseando JSON: " + e.getMessage(), e);
        }
    }
    public void GuardarEnJson(Consulta consulta) throws IOException {
        consultas.add(consulta);
        FileWriter escritura = new FileWriter("consultas.json");
        escritura.write(gson.toJson(consultas));
        escritura.close();
    }
}

Menu

import java.util.Scanner;


public class Menu {
    private final Scanner scan = new Scanner(System.in);

    public int obtenerOpcion() {
        int opt = 0;
        while (opt != 7){
            System.out.println("Conversor de monedas .SAS");
            System.out.println("1. Dólar a Peso Argentino");
            System.out.println("2. Peso Argentino a Dólar");
            System.out.println("3. Dólar a Real Brasileño");
            System.out.println("4. Real Brasileño a Dólar");
            System.out.println("5. Dólar a Peso Colombiano");
            System.out.println("6. Peso Colombiano a Dólar");
            System.out.println("7. Salir");
            System.out.print("Elije una opción válida: ");
            opt = scan.nextInt();
            if (opt >= 1 && opt <= 6) {
                return opt;
            }
            else {
                break;
            }
        }
        return opt;
    }
    public Double obtenerValorAConvertir(){
        double valorAConvertir = 0.0;

        System.out.println("\nIngresa el valor que deseas convertir: ");
        valorAConvertir = scan.nextDouble();

        return valorAConvertir;
    }

    public String tipoConversor(int opt){
        String tipoConversor = "";
        if(opt == 1){
            tipoConversor = "USD/ARS";
        }else if(opt == 2){
            tipoConversor = "ARS/USD";
        }else if(opt == 3){
            tipoConversor = "USD/BRL";
        }else if(opt == 4){
            tipoConversor = "USD/BRL";
        }else if(opt == 5){
            tipoConversor = "USD/COP";
        }else if(opt == 6){
            tipoConversor = "COP/USD";
        }
        return tipoConversor;
    }
}
1 respuesta

Hola Diego, espero que estés bien

¡Gracias por compartir tu solución! Parece que has hecho un gran trabajo al implementar un conversor de monedas usando Java. Aquí te dejo algunos comentarios que podrían ayudarte a mejorar o ajustar algunos detalles:

  1. Gestión de Errores: En la clase ConsultaAPI, ya estás manejando errores de respuesta HTTP, lo cual es excelente. Sin embargo, también podrías considerar manejar posibles excepciones al convertir el JSON a un objeto Consulta en la clase CrearArchivo.

  2. Selección de Monedas: En la clase Menu, en el método tipoConversor, parece que hay un pequeño error en el caso de conversión de Real Brasileño a Dólar. Debería ser BRL/USD en lugar de USD/BRL.

  3. Cierre de Recursos: En la clase CrearArchivo, asegúrate de cerrar el FileWriter en un bloque finally o usa un bloque try-with-resources para garantizar que se cierra adecuadamente incluso si ocurre una excepción.

  4. Mejoras en la Interfaz de Usuario: Podrías mejorar la experiencia del usuario mostrando un mensaje de error si se introduce una opción no válida en el menú, en lugar de simplemente salir del bucle.

  5. Pruebas y Validaciones: Asegúrate de probar tu programa con diferentes entradas para verificar que todas las conversiones funcionan correctamente y que los errores se manejan de manera adecuada.

Espero que estas sugerencias te sean útiles. ¡Sigue adelante con tu aprendizaje y experimentación en Java!

Espero haber ayudado y buenos estudios!