Моделирование логики кошелька в 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 шт):

Автор решения: Nowhere Man

Есть ряд замечаний к коду, представленному в этом вопросе:

  • Проверку на тип валюты лучше выполнять при помощи метода 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();
}
→ Ссылка