Я пытаюсь перебрать ArrayList, чтобы найти самое низкое значение показаний датчика - PullRequest
0 голосов
/ 13 декабря 2018

Мои инструкции: создать сенсорный объект, который ссылается на нулевой элемент.Напишите цикл for, который начинается с элемента 1, проходит по всем элементам массива и проверяет, меньше ли значение показаний датчика, чем нулевой элемент.Я должен предположить, что нулевой элемент уже имеет минимальное значение.Если значение меньше, установите его как минимальное значение.Вот код, который у меня есть, но он не находит минимальное значение.

public int findMinReadingIndex() {
        ArrayList<SensorReading> sensorReadings = new ArrayList<>();
        sensorReadings.get(0);
        int minIndex = 0;
        for(int i=1; i< sensorReadings.size(); i++) {
            if (this.sensorReadings.get(i).getValue() < i)
                minIndex = i;
        }
            return minIndex;
    }

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018

Лучше сосредоточиться на проблеме: у вас есть список, и вы хотите найти индекс с минимальным значением.Таким образом, вы должны написать метод, который принимает List<SensorReading> и получает int значение.Обратите внимание, что использование get() не оптимально, особенно если вы не знаете конкретной реализации List.Вместо этого вы должны использовать итератор.

public int findMinReadingIndex(List<SensorReading> sensorReadings) {
    int minIndex = 0;
    int minValue = 0;
    int i = 0;

    for(SensorReading sensorReading : sensorReadings) {     
        if(i == 0 || sensorReading.getValue() < minValue) {
            minValue = sensorReading.getValue();
            minIndex = i;
        }

        i++;
    }

    return minIndex;
}
0 голосов
/ 13 декабря 2018

Если вы используете Java 8 один линейный код, используйте поток с Comparator API.

SensorReading minVal = sensorReadingList.stream().min(Comparator.comparing(SensorReading::getValue))
                .orElseThrow(NoSuchElementException::new);

System.out.println(minVal.getValue());
  1. Прежде всего вызовите метод stream() в списке, чтобы получить поток значений из списка.
  2. После этого вызовите метод min() в потоке, чтобы получить минимальное значение из списка.
  3. Мы передаем лямбда-функцию в качестве компаратора, отсортируем список и определим минимальное значение.value.
  4. После этого мы вызываем orElseThrow(), чтобы вызвать исключение, если не получено значение от min()
0 голосов
/ 13 декабря 2018

Незначительные изменения ниже:

public int findMinReadingIndex() {
    ArrayList<SensorReading> sensorReadings = new ArrayList<>();
    float minReading = sensorReadings.get(0).getValue();
    int minIndex = 0;
    for(int index = 1; index < sensorReadings.size(); index ++) {
        float reading = this.sensorReadings.get(index).getValue();
        if (reading < minReading)
            minIndex = index;
    }
        return minIndex;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...