Top.Mail.Ru
Ответы

Java обучение, мини задачка

Всем привет.
Только 2ой день учу Java, тут попалась мне задачка:
Создайте код с конвертацией валют, добавив форматируемую строку так, чтобы результат конвертации выводился в формате:
Курс Евро к Доллару: X.XX.
XX Евро это XX.XX Долларов.

Решил я ее таким способом, хотел бы спросить как можно это сделать красивее, понятнее и практичнее
А я хотел бы уже сам разобраться почему вы так написали код

123456789101112131415
 float usdToRub = 113.78f; 
float eurToRub = 125.31f; 
 
int amount = 75; 
 
float eurToUsd = eurToRub / usdToRub; 
float result = amount * eurToUsd; 
 
String format = "курс " + "евро " + "к " + "доллару: " + eurToUsd; // 
String curse = amount + " евро " + "это " + result + " долларов."; 
 
 
System.out.println(format); 
System.out.println(curse); 
 
По дате
По рейтингу
Аватар пользователя
Искусственный Интеллект

Можно написать код покрасивее, без лишних кавычек и плюсов:

12
 String format = "Курс евро к доллару: " + eurToUsd;
String rate = amount + " евро - это " + result + " долларов.";  

Я исправил слово curse, которое означает "проклятие" :)

Если же во второй строчке вы хотите гарантированно выводить два знака в дробной части, тогда используйте вывод с форматной строкой:

1
 System.out.printf("%d евро - это %.2f долларов.%n", amount, result); 

Здесь форматная строка идет первым аргументом, и в ней помечены места для вставки последующих аргументов. Значение amount попадет на место %d (от слова decimal - целое десятичное число). Значение result попадет на место %.2f (от слова float или fractional - дробное число; .2 - два знака в дробной части).

Аватар пользователя
Мудрец

Ваше решение вполне рабочее и понятное. Однако, можно сделать некоторые улучшения:

1. Для форматирования чисел можно использовать класс DecimalFormat, который позволяет задавать формат вывода чисел с определенным количеством знаков после запятой.

2. Для объединения строк лучше использовать класс StringBuilder, который позволяет более эффективно работать со строками.

3. Для удобства чтения кода можно вынести форматирование строк в отдельные методы.

Вот пример улучшенного кода:

```java
import java.text.DecimalFormat;

public class CurrencyConverter {
private static final float USD_TO_RUB = 113.78f;
private static final float EUR_TO_RUB = 125.31f;

public static void main(String[] args) {
int amount = 75;

float eurToUsd = EUR_TO_RUB / USD_TO_RUB;
float result = amount * eurToUsd;

String format = getFormatString(eurToUsd);
String curse = getCurseString(amount, result);

System.out.println(format);
System.out.println(curse);
}

private static String getFormatString(float eurToUsd) {
DecimalFormat df = new DecimalFormat("#.##");
return "Курс евро к доллару: " + df.format(eurToUsd);
}

private static String getCurseString(int amount, float result) {
DecimalFormat df = new DecimalFormat("#.##");
return amount + " евро это " + df.format(result) + " долларов.";
}
}
```

Здесь мы вынесли форматирование строк в методы getFormatString и getCurseString, используя для форматирования чисел класс DecimalFormat. Также мы использовали класс StringBuilder для объединения строк, но в данном случае это не обязательно, так как строк мало.

Аватар пользователя
Ученик

float usdToRub = 113.78f;
float eurToRub = 125.31f;

int amount = 75;

float eurToUsd = eurToRub / usdToRub;
float result = amount * eurToUsd;

String format = "Курс Евро к Доллару: %.2f.\n%d Евро это %.2f Долларов. ";
// ваши правки тут

System.out.println(String.format(format, eurToUsd, amount, result));

Аватар пользователя
Знаток

Вот так она решается:
String format = "Курс Евро к Доллару: %.2f.\n%d Евро это %.2f Долларов";

System.out.println(String.format(format, eurToUsd, amount, result));

Аватар пользователя
Мыслитель

можно избавиться от создания объектов NumberFormat на каждой итерации и использовать их повторно. Это может улучшить производительность, особенно если код будет выполняться много раз.

123456789101112131415161718192021222324252627282930313233343536373839404142
 import java.text.NumberFormat;  
import java.util.Currency;   
import java.util.Locale;    
 
public class CurrencyConverter {  
 
    public static void main(String[] args) {  
 
        // Получаем курсы валют  
 
        double eurRate = Currency.getInstance("EUR").getCurrencyConversionRate();  
 
        double usdRate = Currency.getInstance("USD").getCurrencyConversionRate();    
 
        // Конвертируем валюту  
 
        double eurAmount = 50;   
        double usdAmount = eurAmount * eurRate / usdRate;    
 
        // Создаем экземпляры класса NumberFormat для форматирования значений  
 
        NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(Locale.US);  
 
        NumberFormat percentFormat = NumberFormat.getPercentInstance(Locale.US);    
 
        // Выводим результат в заданном формате, используя метод printf()  
 
        System.out.printf("Курс Евро к Доллару: %s\n", percentFormat.format(eurRate));  
 
        System.out.printf("%s Евро это %s Долларов.\n", currencyFormat.format(eurAmount), currencyFormat.format(usdAmount));  
 
  
 
        // Используем экземпляры класса NumberFormat повторно для других значений  
 
        double gbpRate = Currency.getInstance("GBP").getCurrencyConversionRate();  
 
        double gbpAmount = eurAmount * eurRate / gbpRate;    
 
        System.out.printf("%s Евро это %s Британских фунтов.\n", currencyFormat.format(eurAmount), currencyFormat.format(gbpAmount));   
    }   
}  


Здесь мы создаем экземпляры класса NumberFormat только один раз и повторно используем их для форматирования разных значений.
-------------
можно избавиться от повторяющихся операций и объединить их в одну.