Почему вы инициализируете runningTotal
в ноль? Каков его тип? Где это заявлено? Было бы хорошо, если бы вы поместили несколько примеров кода, которые напоминают реальный код Java.
Если двигаться дальше, моя критика будет следующей: ваша функция делает слишком много. Функция или метод должны быть связными. Точнее, они должны делать одно и только одно.
Что еще хуже, что происходит в цикле for, когда x = 5? Вы копируете runningTotal[6]
в runningTotal[5]
, но затем у вас есть две копии одного и того же значения в позициях 5 и 6.
В вашем дизайне ваша функция
- перемещает / перетасовывает элементы в вашем массиве
- рассчитывает сумму
- печатает материал со стандартной ошибкой
- возвращает сумму
Это слишком много.
Мое первое предложение - не перемещать вещи в массиве. Вместо этого реализуйте кольцевой буфер и используйте его вместо массива. Это упростит ваш дизайн. Мое второе предложение состоит в том, чтобы разбить вещи на функции, которые являются связными:
- имеет структуру данных (кольцевой буфер), которая позволяет вам добавлять к ней (и удаляет самую старую запись, когда она достигает своей емкости).
- имеет структуру данных для реализации интегратора
- имеет функцию, которая вычисляет сумму на итераторе (вам все равно, вычисляете ли вы сумму из массива, списка или кругового буфера.)
- не называйте это всего. Назовите это сумма, которую вы вычисляете.
Вот что я бы сделал :) 1038 *
// java pseudocode below - might not compile.
// assume you have a class called CircularBuffer, of say, doubles,
public class CircularBuffer
{
public CircularBuffer(final int capacity) {...}
public int getSize(){ ... return # of elements in it ... }
public add(final Double d){ ... add to the end, drop from the front if we reach capacity... }
public Iterator<Double> iterator(){ ... gets an interator over the content of the buffer ...}
}
// somewhere else, in another class... NOT ON CircularBuffer
public class Calculator
{
//assume none of the double values is null
static public Double sum(final Double ... doubles )
{
double sum= 0;
for( Double d : doubles )
{
total += d.doubleValue();
}
return sum;
}
// you can calculate other things too
static public Double avg(final Double ... doubles ){...}
static public Double std(final Double ... doubles ){...}
}
/// somewhere else
{
CircularBuffer buffer = new CircularBuffer(7);
while( readingAndReadingAndReading )
{
// drops oldest values as it reaches capacity
// always keeping the latest 7 readings
buffer.add( getLatestValueFromSomewhere() );
}
System.out.println( "total=" + Calculator.sum() );
System.out.println( "average=" + Calculator.avg() );
System.out.println( "standard deviation=" + Calculator.std() );
}