diff --git a/desktop.ini b/desktop.ini
new file mode 100644
index 000000000000..3dfcbb05764b
--- /dev/null
+++ b/desktop.ini
@@ -0,0 +1,2 @@
+[.ShellClassInfo]
+LocalizedResourceName=@Java,0
diff --git a/pom.xml b/pom.xml
index e0e3516c08eb..9ea475131b4a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,6 +7,12 @@
Java
1.0-SNAPSHOT
jar
+
+ org.json
+ json
+ 20240303
+
+
UTF-8
@@ -14,6 +20,7 @@
21
3.27.6
+
diff --git a/src/main/java/com/thealgorithms/conversions/USDtoIND.java b/src/main/java/com/thealgorithms/conversions/USDtoIND.java
new file mode 100644
index 000000000000..f2af8a2c4268
--- /dev/null
+++ b/src/main/java/com/thealgorithms/conversions/USDtoIND.java
@@ -0,0 +1,89 @@
+package com.thealgorithms.conversions;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.Scanner;
+
+public class USDtoIND {
+
+ // ✅ Free, keyless API endpoint
+ private static final String API_URL = "https://open.er-api.com/v6/latest/USD";
+
+ /**
+ * Fetches the live USD to INR rate from open.er-api.com
+ *
+ * @return the exchange rate, or -1 if an error occurs
+ */
+ public static double fetchLiveRate() {
+ try {
+ // Step 1: Connect to the URL
+ URL url = new URL(API_URL);
+ HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+ conn.setRequestMethod("GET");
+
+ // Step 2: Read API response
+ BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
+ StringBuilder response = new StringBuilder();
+ String line;
+ while ((line = reader.readLine()) != null) {
+ response.append(line);
+ }
+ reader.close();
+
+ // Step 3: Extract INR value manually from the JSON text
+ String json = response.toString();
+
+ // Find INR rate
+ int start = json.indexOf("\"INR\":") + 6;
+ int end = json.indexOf(",", start);
+ if (end == -1)
+ end = json.indexOf("}", start);
+ String rateStr = json.substring(start, end);
+
+ return Double.parseDouble(rateStr);
+ } catch (Exception e) {
+ System.out.println("Error fetching exchange rate: " + e.getMessage());
+ return -1;
+ }
+ }
+
+ public static void main(String[] args) {
+ Scanner sc = new Scanner(System.in);
+
+ System.out.println("USD ↔ INR Converter");
+ System.out.println("--------------------");
+ System.out.println("Choose conversion type:");
+ System.out.println("1. USD → INR");
+ System.out.println("2. INR → USD");
+ System.out.print("Enter your choice (1 or 2): ");
+ int choice = sc.nextInt();
+
+ // Fetch live exchange rate
+ double rate = fetchLiveRate();
+
+ if (rate <= 0) {
+ System.out.println("Failed to retrieve live exchange rate. Please check your internet connection.");
+ sc.close();
+ return;
+ }
+
+ // Conversion logic
+ if (choice == 1) {
+ System.out.print("Enter amount in USD: ");
+ double usd = sc.nextDouble();
+ double inr = usd * rate;
+ System.out.printf("%.2f USD = %.2f INR (Rate: %.2f)%n", usd, inr, rate);
+ } else if (choice == 2) {
+ System.out.print("Enter amount in INR: ");
+ double inr = sc.nextDouble();
+ double usd = inr / rate;
+ System.out.printf("%.2f INR = %.2f USD (Rate: %.2f)%n", inr, usd, rate);
+ } else {
+ System.out.println("Invalid choice. Please run the program again and select 1 or 2.");
+ }
+
+ sc.close();
+ }
+}