Моделирование логики кошелька в Java
Всем привет! У меня вопрос по задаче:нужно реализовать публичный статический метод getTotalAmount(), который принимает на вход кошелёк с деньгами в виде массива строк и название валюты. Метод должен возвращать сумму денег указанной валюты.
Параметры метода:
Массив строк, содержащий купюры разных валют с различными номиналами и наименование валюты (строка из 3-х символов).
Нужно реализовать данный метод, используя управляющие инструкции.
Как программа должна работать:
String[] money1 = {"eur 10", "usd 1", "usd 10", "rub 50", "usd 5"};
App.getTotalAmount(money1, "usd"); // 16
String[] money2 = {"eur 10", "usd 1", "eur 5", "rub 100", "eur 20", "eur 100", "rub 200"};
App.getTotalAmount(money2, "eur"); // 135
String[] money3 = {"eur 10", "rub 50", "eur 5", "rub 10", "rub 10", "eur 100", "rub 200"};
App.getTotalAmount(money3, "rub"); // 270
Указание к задаче:
1.Для преобразования строки в целое число используйте метод parseInt() класса Integer.
2.Для извлечения подстроки из строки используйте метод substring().
var text = "some text";
text.substring(1, 6); // "ome t"
text.substring(7); // "xt"
Мой код:
package com.arrays.problem6;
public class Currency {
public static void main(String[] args){
}
public static String getTotalAmount(String[] money,String currency){
int result=0;
for(String item: money){
if(currency==item.substring(0,3)){
// условие: если указанный курс равен элементу массива, который порезан с 0 - 3 индекс, то
//прибавляем к счетчику что осталось до конца элемента, преобразовав через parseInt() строку в число
}
result=Integer.parseInt(item.substring(4, item.length()));
}
return result;
}
}
Я совсем запутался в реализации логики метода getTotalAmount().Помогите мне пожалуйста его реализовать.
Ответы (1 шт):
Есть ряд замечаний к коду, представленному в этом вопросе:
- Проверку на тип валюты лучше выполнять при помощи метода
String::startsWith, чтобы не создавать излишнюю строку. - Можно избавиться от "магического" числа 4 при поиске подстроки с числом, например вычислив длину строки с валютой с учетом пробела, либо при помощи методов
String::indexOfилиString::lastIndexOfдля поиска пробела. - Следует определиться, что именно должен возвращать в результате метод
getTotalAmount: целое число, строку, или просто выводить на печать.
Вариант решения с учётом предыдущих замечаний:
public static int getTotalAmount(String[] money, String currency) {
int result = 0;
int spacePos = currency.length() + 1;
for (String item : money) {
if (item.startsWith(currency)) {
result += Integer.parseInt(item.substring(spacePos));
}
}
return result;
}
При помощи Stream API решение может быть ещё компактнее:
public static int getTotalAmount(String[] money, String currency) {
return Arrays.stream(money)
.filter(item -> item.startsWith(currency))
.map(item -> item.substring(item.indexOf(' ', currency.length()) + 1))
.mapToInt(Integer::parseInt)
.sum();
}