Найти среднее / минимальное / максимальное - PullRequest
0 голосов
/ 10 мая 2018
   if (cleaningbay >=5)
   {
        long duration =5;
        try
        {    
            System.out.println("\n\t  All cleaners are busy..Please wait!..................................................................(-_-)" + bus.getName() );
            System.out.println("\n\t" + bus.getName() + "waited for " + duration );
            TimeUnit.SECONDS.sleep(duration);
            bus.notify();
            Cleaners(bus);
            bus.wait();
        }

        catch(InterruptedException iex)
        {
            iex.printStackTrace();
        } 
   }
   else if (cleaningbay < 5)
   {
        System.out.println("\n\t" + bus.getName() + "is heading to " + bus.getCleanersName() + Clock.get_time());
        cleaningbay++;
        long duration=0;
        try
        {    
            System.out.println("\n\t Cleaning in progress :" + bus.getName() + Clock.get_time() );
            duration = (long)(Math.random()* 3);

            TimeUnit.SECONDS.sleep(duration);
        }
        catch(InterruptedException iex)
        {
            iex.printStackTrace();
        }
   }

У меня есть эти коды в другой части моей программы, где время записывается в переменную «длительность».Я использовал переменную продолжительности в разных методах в одном и том же классе.я хотел знать, есть ли способ добавления этих значений "время" и найти среднее значение / мин / макс

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Если ваш класс получает много трафика, вы не хотите хранить все время в списке, вместо этого я бы предложил вам создать служебный класс, который поможет вам отслеживать значения, необходимые для получения MIN, MAX и AVGпримерно так:

public class TimeHistory {
    private Long minTime = Long.MAX_VALUE; 
    private Long maxTime = Long.MIN_VALUE;
    private Long timeSum = 0L;
    private Long timeCount = 0L;

    public void logTime(long time){
        if(time < minTime){
            minTime = time;
        }

        if(time > maxTime){
            maxTime = time;
        }

        timeSum += time;
        timeCount++;
    }

    public Long getMinTime() {
        return minTime;
    }

    public Long getMaxTime() {
        return maxTime;
    }

    public Long getTimeAvg() {
        return timeSum / timeCount;
    }
}

Здесь вы вызываете метод logTime (время);каждый раз, когда вам нужно, и он позаботится о том, чтобы эти значения обновлялись для вас, затем вам нужно просто вызвать методы getMinTime (), getMaxTime () или getTimeAvg ().

Надеюсь, это поможет; -)

0 голосов
/ 10 мая 2018

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

List<Long> timeHistory = new ArrayList<>();
...
timeHistory.add(duration);
duration = (long)(Math.random()* 3);

timeHistory должна быть глобальной переменной вашего класса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...