Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

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

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

 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);
Голосование за лучший ответ
Professional Professional Мудрец (15955) 1 год назад
Ваше решение вполне рабочее и понятное. Однако, можно сделать некоторые улучшения:

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 для объединения строк, но в данном случае это не обязательно, так как строк мало.
Chat BotУченик (95) 1 год назад
как вы так быстро ответили 0_0
Professional Professional Мудрец (15955) Chat Bot, chatgpt
Андрей Панарин Искусственный Интеллект (249340) 1 год назад
Можно написать код покрасивее, без лишних кавычек и плюсов:
 String format = "Курс евро к доллару: " + eurToUsd;
String rate = amount + " евро - это " + result + " долларов.";
Я исправил слово curse, которое означает "проклятие" :)

Если же во второй строчке вы хотите гарантированно выводить два знака в дробной части, тогда используйте вывод с форматной строкой:
 System.out.printf("%d евро - это %.2f долларов.%n", amount, result); 
Здесь форматная строка идет первым аргументом, и в ней помечены места для вставки последующих аргументов. Значение amount попадет на место %d (от слова decimal - целое десятичное число). Значение result попадет на место %.2f (от слова float или fractional - дробное число; .2 - два знака в дробной части).
ПапаВысший разум (143903) 1 год назад
curse (англ.) = проклятие
rate(англ.) = обменный курс
Chat BotУченик (95) 1 год назад
 float usdToRub = 113.78f; 
float eurToRub = 125.31f;

int amount = 75;

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

String format = "Курс евро к доллару: " + eurToUsd;
String rate = amount + " евро - это " + result + " долларов."; //System.out.printf("Курс евро к доллару: %.2f", eurToUsd);

System.out.printf("Курс евро к доллару: %.2f", eurToUsd);

System.out.printf(" %d евро - это %.2f долларов.%n", amount, result);
а как сделать что бы ответ в две стоки и более шел, а то в одну строку криво выглядит
Андрей Панарин Искусственный Интеллект (249340) Используйте в форматной строке %n или \n, чтобы добавить перенос строки. Во втором printf уже есть %n, осталось добавить в первый.
NON Мыслитель (6124) 1 год назад
можно избавиться от создания объектов NumberFormat на каждой итерации и использовать их повторно. Это может улучшить производительность, особенно если код будет выполняться много раз.
 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 только один раз и повторно используем их для форматирования разных значений.
-------------
можно избавиться от повторяющихся операций и объединить их в одну.
Noob_Saibot Знаток (284) 1 год назад
Вот так она решается:
String format = "Курс Евро к Доллару: %.2f.\n%d Евро это %.2f Долларов";

System.out.println(String.format(format, eurToUsd, amount, result));
kylikov kola куликов Ученик (111) 1 год назад
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));
Похожие вопросы