Как вывести все индексы массива, соответствующие условию?

Создан сервис, который определяет номер месяца с наибольшим количеством продаж.

public class StatsService {

    public int monthOfTopSales(long[] sales) {
        long topSale = sales [0];
        int month = 0;
        int numTopMonth = 0;
        for (long sale : sales) {
            month ++;
            if (topSale < sale) {
                topSale = (int) sale;
                numTopMonth=month;
            }
        }
        return numTopMonth;
    }

}


И тест к нему с массивом данных и выводом.

class StatsServiceTest {

    @Test
    void shouldFindTopMonth() {
        StatsService service = new StatsService();

        long[] sales = {8, 15, 13, 15, 17, 20, 19, 20, 7, 14, 14, 18};
        long topMonth = service.monthOfTopSales(sales);

        System.out.println(topMonth);
    }
}


Таким образом получается вывод первого индекса максимального значения. Как можно дополнить существующий код, чтобы был вывод индексов всех максимальных значений, если их несколько?
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
Bavashi
@Bavashi Куратор тега Java
public class StatsService {

    public ArrayList<Integer> monthOfTopSales(long[] sales) {
        long topSale = sales [0];
        int month = 0;
        int numTopMonth = 0;
        ArrayList<Integer> result = new ArrayList<Integer>();
        
        for (long sale : sales) {
            if (topSale <= sale) {
                topSale = (int) sale;
            }
        }
        
        for (int i = 0; i < sales.length; i++) {
          if (topSale == sales[i]) {
              result.add(i+1);
          }
        }
        
        return result;
    }

}

class StatsServiceTest {

    @Test
    void shouldFindTopMonth() {
        StatsService service = new StatsService();
        ArrayList<Integer> topMonth = new ArrayList<Integer>();

        long[] sales = {8, 15, 13, 15, 17, 20, 19, 20, 7, 14, 14, 18};
        topMonth = service.monthOfTopSales(sales);

        System.out.println(topMonth);
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Miron11
Пишу sql 20 лет. Срок :)
public class StatsService {

    public ArrayList<Integer> monthsOfTopSales(long[] sales) {

        long topSale = sales[0];
        Integer month = 0;
        ArrayList<Integer> topMonths = new ArrayList<Integer>();

        for (long sale : sales) {
            month ++;
            if (topSale < sale) {
                topSale = sale;
                topMonths.clear();
                topMonths.add(month);
            } else if ( topSale == sale ) {
                topMonths.add(month);                
            }
        }
        return topMonths;
    }

}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы