diff --git a/src/java/org/apache/commons/math/stat/descriptive/DescriptiveStatistics.java b/src/java/org/apache/commons/math/stat/descriptive/DescriptiveStatistics.java index cbf972459..bdf493d4d 100644 --- a/src/java/org/apache/commons/math/stat/descriptive/DescriptiveStatistics.java +++ b/src/java/org/apache/commons/math/stat/descriptive/DescriptiveStatistics.java @@ -411,15 +411,17 @@ public class DescriptiveStatistics implements StatisticalSummary, Serializable { */ public String toString() { StringBuffer outBuffer = new StringBuffer(); - outBuffer.append("DescriptiveStatistics:\n"); - outBuffer.append("n: " + getN() + "\n"); - outBuffer.append("min: " + getMin() + "\n"); - outBuffer.append("max: " + getMax() + "\n"); - outBuffer.append("mean: " + getMean() + "\n"); - outBuffer.append("std dev: " + getStandardDeviation() + "\n"); - outBuffer.append("median: " + getPercentile(50) + "\n"); - outBuffer.append("skewness: " + getSkewness() + "\n"); - outBuffer.append("kurtosis: " + getKurtosis() + "\n"); + String endl = "\n"; + outBuffer.append("DescriptiveStatistics:").append(endl); + outBuffer.append("n: ").append(getN()).append(endl); + outBuffer.append("min: ").append(getMin()).append(endl); + outBuffer.append("max: ").append(getMax()).append(endl); + outBuffer.append("mean: ").append(getMean()).append(endl); + outBuffer.append("std dev: ").append(getStandardDeviation()) + .append(endl); + outBuffer.append("median: ").append(getPercentile(50)).append(endl); + outBuffer.append("skewness: ").append(getSkewness()).append(endl); + outBuffer.append("kurtosis: ").append(getKurtosis()).append(endl); return outBuffer.toString(); } diff --git a/src/java/org/apache/commons/math/stat/descriptive/SummaryStatistics.java b/src/java/org/apache/commons/math/stat/descriptive/SummaryStatistics.java index dee7312d4..fbbb1522b 100644 --- a/src/java/org/apache/commons/math/stat/descriptive/SummaryStatistics.java +++ b/src/java/org/apache/commons/math/stat/descriptive/SummaryStatistics.java @@ -1,18 +1,15 @@ /* * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law + * or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. */ package org.apache.commons.math.stat.descriptive; @@ -31,79 +28,77 @@ import org.apache.commons.math.stat.descriptive.summary.SumOfSquares; import org.apache.commons.math.util.MathUtils; /** - *

Computes summary statistics for a stream of data values added using the + *

+ * Computes summary statistics for a stream of data values added using the * {@link #addValue(double) addValue} method. The data values are not stored in - * memory, so this class can be used to compute statistics for very large - * data streams.

- * - *

The {@link StorelessUnivariateStatistic} instances used to maintain - * summary state and compute statistics are configurable via setters. - * For example, the default implementation for the variance can be overridden by - * calling {@link #setVarianceImpl(StorelessUnivariateStatistic)}. Actual - * parameters to these methods must implement the - * {@link StorelessUnivariateStatistic} interface and configuration must be - * completed before addValue is called. No configuration is - * necessary to use the default, commons-math provided implementations.

- * - *

Note: This class is not thread-safe. Use + * memory, so this class can be used to compute statistics for very large data + * streams. + *

+ *

+ * The {@link StorelessUnivariateStatistic} instances used to maintain summary + * state and compute statistics are configurable via setters. For example, the + * default implementation for the variance can be overridden by calling + * {@link #setVarianceImpl(StorelessUnivariateStatistic)}. Actual parameters to + * these methods must implement the {@link StorelessUnivariateStatistic} + * interface and configuration must be completed before addValue + * is called. No configuration is necessary to use the default, commons-math + * provided implementations. + *

+ *

+ * Note: This class is not thread-safe. Use * {@link SynchronizedSummaryStatistics} if concurrent access from multiple - * threads is required.

- * - * @version $Revision$ $Date$ + * threads is required. + *

+ * @version $Revision$ $Date: 2008-02-10 13:28:59 -0600 (Sun, 10 Feb + * 2008) $ */ public class SummaryStatistics implements StatisticalSummary, Serializable { /** Serialization UID */ private static final long serialVersionUID = -3346512372447011854L; - + /** * Create an instance of a SummaryStatistics - * - * @param cls the type of SummaryStatistics object to - * create. - * @return a new instance. + * @param cls the type of SummaryStatistics object to create. + * @return a new instance. * @deprecated to be removed in commons-math 2.0 * @throws InstantiationException is thrown if the object can not be - * created. + * created. * @throws IllegalAccessException is thrown if the type's default - * constructor is not accessible. + * constructor is not accessible. */ - public static SummaryStatistics newInstance(Class cls) throws - InstantiationException, IllegalAccessException { + public static SummaryStatistics newInstance(Class cls) throws InstantiationException, IllegalAccessException { return (SummaryStatistics)cls.newInstance(); } - + /** * Create an instance of a SummaryStatistics - * * @return a new SummaryStatistics instance. - * @deprecated to be removed in commons-math 2.0 + * @deprecated to be removed in commons-math 2.0 */ public static SummaryStatistics newInstance() { SummaryStatistics instance = null; try { DiscoverClass dc = new DiscoverClass(); - instance = (SummaryStatistics) dc.newInstance( - SummaryStatistics.class, - "org.apache.commons.math.stat.descriptive.SummaryStatisticsImpl"); - } catch(Throwable t) { + instance = (SummaryStatistics)dc.newInstance(SummaryStatistics.class, "org.apache.commons.math.stat.descriptive.SummaryStatisticsImpl"); + } catch (Throwable t) { return new SummaryStatisticsImpl(); } return instance; } - + /** * Construct a SummaryStatistics instance */ public SummaryStatistics() { } - + /** count of values that have been added */ protected long n = 0; - + /** SecondMoment is used to compute the mean and variance */ protected SecondMoment secondMoment = new SecondMoment(); - + /** sum of values that have been added */ protected Sum sum = new Sum(); @@ -127,46 +122,43 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { /** variance of values that have been added */ protected Variance variance = new Variance(); - + /** Sum statistic implementation - can be reset by setter. */ private StorelessUnivariateStatistic sumImpl = sum; - + /** Sum of squares statistic implementation - can be reset by setter. */ private StorelessUnivariateStatistic sumsqImpl = sumsq; - + /** Minimum statistic implementation - can be reset by setter. */ private StorelessUnivariateStatistic minImpl = min; - + /** Maximum statistic implementation - can be reset by setter. */ private StorelessUnivariateStatistic maxImpl = max; - + /** Sum of log statistic implementation - can be reset by setter. */ private StorelessUnivariateStatistic sumLogImpl = sumLog; - + /** Geometric mean statistic implementation - can be reset by setter. */ private StorelessUnivariateStatistic geoMeanImpl = geoMean; - + /** Mean statistic implementation - can be reset by setter. */ private StorelessUnivariateStatistic meanImpl = mean; - + /** Variance statistic implementation - can be reset by setter. */ private StorelessUnivariateStatistic varianceImpl = variance; /** * Return a {@link StatisticalSummaryValues} instance reporting current * statistics. - * - * @return Current values of statistics + * @return Current values of statistics */ public StatisticalSummary getSummary() { - return new StatisticalSummaryValues(getMean(), getVariance(), getN(), - getMax(), getMin(), getSum()); + return new StatisticalSummaryValues(getMean(), getVariance(), getN(), getMax(), getMin(), getSum()); } - + /** * Add a value to the data - * - * @param value the value to add + * @param value the value to add */ public void addValue(double value) { sumImpl.increment(value); @@ -178,7 +170,7 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { // If mean, variance or geomean have been overridden, // need to increment these if (!(meanImpl instanceof Mean)) { - meanImpl.increment(value); + meanImpl.increment(value); } if (!(varianceImpl instanceof Variance)) { varianceImpl.increment(value); @@ -189,7 +181,7 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { n++; } - /** + /** * Returns the number of available values * @return The number of available values */ @@ -208,8 +200,8 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { /** * Returns the sum of the squares of the values that have been added. *

- * Double.NaN is returned if no values have been added.

- * + * Double.NaN is returned if no values have been added. + *

* @return The sum of squares */ public double getSumsq() { @@ -219,23 +211,23 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { /** * Returns the mean of the values that have been added. *

- * Double.NaN is returned if no values have been added.

- * + * Double.NaN is returned if no values have been added. + *

* @return the mean */ public double getMean() { - if (mean == meanImpl) { - return new Mean(secondMoment).getResult(); - } else { - return meanImpl.getResult(); - } + if (mean == meanImpl) { + return new Mean(secondMoment).getResult(); + } else { + return meanImpl.getResult(); + } } /** * Returns the standard deviation of the values that have been added. *

- * Double.NaN is returned if no values have been added.

- * + * Double.NaN is returned if no values have been added. + *

* @return the standard deviation */ public double getStandardDeviation() { @@ -253,9 +245,9 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { /** * Returns the variance of the values that have been added. *

- * Double.NaN is returned if no values have been added.

- * - * @return the variance + * Double.NaN is returned if no values have been added. + *

+ * @return the variance */ public double getVariance() { if (varianceImpl == variance) { @@ -268,9 +260,9 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { /** * Returns the maximum of the values that have been added. *

- * Double.NaN is returned if no values have been added.

- * - * @return the maximum + * Double.NaN is returned if no values have been added. + *

+ * @return the maximum */ public double getMax() { return maxImpl.getResult(); @@ -279,9 +271,9 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { /** * Returns the minimum of the values that have been added. *

- * Double.NaN is returned if no values have been added.

- * - * @return the minimum + * Double.NaN is returned if no values have been added. + *

+ * @return the minimum */ public double getMin() { return minImpl.getResult(); @@ -290,49 +282,51 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { /** * Returns the geometric mean of the values that have been added. *

- * Double.NaN is returned if no values have been added.

- * - * @return the geometric mean + * Double.NaN is returned if no values have been added. + *

+ * @return the geometric mean */ public double getGeometricMean() { return geoMeanImpl.getResult(); } - + /** * Returns the sum of the logs of the values that have been added. *

- * Double.NaN is returned if no values have been added.

- * + * Double.NaN is returned if no values have been added. + *

* @return the sum of logs * @since 1.2 */ public double getSumOfLogs() { return sumLogImpl.getResult(); } - + /** - * Generates a text report displaying - * summary statistics from values that + * Generates a text report displaying summary statistics from values that * have been added. * @return String with line feeds displaying statistics * @since 1.2 */ public String toString() { StringBuffer outBuffer = new StringBuffer(); - outBuffer.append("SummaryStatistics:\n"); - outBuffer.append("n: " + getN() + "\n"); - outBuffer.append("min: " + getMin() + "\n"); - outBuffer.append("max: " + getMax() + "\n"); - outBuffer.append("mean: " + getMean() + "\n"); - outBuffer.append("geometric mean: " + getGeometricMean() + "\n"); - outBuffer.append("variance: " + getVariance() + "\n"); - outBuffer.append("sum of squares: " + getSumsq() + "\n"); - outBuffer.append("standard deviation: " + getStandardDeviation() + "\n"); - outBuffer.append("sum of logs: " + getSumOfLogs() + "\n"); + String endl = "\n"; + outBuffer.append("SummaryStatistics:").append(endl); + outBuffer.append("n: ").append(getN()).append(endl); + outBuffer.append("min: ").append(getMin()).append(endl); + outBuffer.append("max: ").append(getMax()).append(endl); + outBuffer.append("mean: ").append(getMean()).append(endl); + outBuffer.append("geometric mean: ").append(getGeometricMean()) + .append(endl); + outBuffer.append("variance: ").append(getVariance()).append(endl); + outBuffer.append("sum of squares: ").append(getSumsq()).append(endl); + outBuffer.append("standard deviation: ").append(getStandardDeviation()) + .append(endl); + outBuffer.append("sum of logs: ").append(getSumOfLogs()).append(endl); return outBuffer.toString(); } - /** + /** * Resets all statistics and storage */ public void clear() { @@ -351,35 +345,30 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { varianceImpl.clear(); } } - + /** - * Returns true iff object is a SummaryStatistics - * instance and all statistics have the same values as this. + * Returns true iff object is a + * SummaryStatistics instance and all statistics have the + * same values as this. * @param object the object to test equality against. * @return true if object equals this */ public boolean equals(Object object) { - if (object == this ) { + if (object == this) { return true; } if (object instanceof SummaryStatistics == false) { return false; } - SummaryStatistics stat = (SummaryStatistics) object; - return (MathUtils.equals(stat.getGeometricMean(), - this.getGeometricMean()) && - MathUtils.equals(stat.getMax(), this.getMax()) && - MathUtils.equals(stat.getMean(),this.getMean()) && - MathUtils.equals(stat.getMin(),this.getMin()) && - MathUtils.equals(stat.getN(), this.getN()) && - MathUtils.equals(stat.getSum(), this.getSum()) && - MathUtils.equals(stat.getSumsq(),this.getSumsq()) && - MathUtils.equals(stat.getVariance(),this.getVariance())); + SummaryStatistics stat = (SummaryStatistics)object; + return (MathUtils.equals(stat.getGeometricMean(), this.getGeometricMean()) && MathUtils.equals(stat.getMax(), this.getMax()) + && MathUtils.equals(stat.getMean(), this.getMean()) && MathUtils.equals(stat.getMin(), this.getMin()) && MathUtils.equals(stat.getN(), this.getN()) + && MathUtils.equals(stat.getSum(), this.getSum()) && MathUtils.equals(stat.getSumsq(), this.getSumsq()) && MathUtils.equals(stat.getVariance(), + this.getVariance())); } - + /** * Returns hash code based on values of statistics - * * @return hash code */ public int hashCode() { @@ -398,7 +387,6 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { // Getters and setters for statistics implementations /** * Returns the currently configured Sum implementation - * * @return the StorelessUnivariateStatistic implementing the sum * @since 1.2 */ @@ -407,15 +395,18 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { } /** - *

Sets the implementation for the Sum.

- *

This method must be activated before any data has been added - i.e., - * before {@link #addValue(double) addValue} has been used to add data; - * otherwise an IllegalStateException will be thrown.

- * - * @param sumImpl the StorelessUnivariateStatistic instance to use - * for computing the Sum - * @throws IllegalStateException if data has already been added - * (i.e if n > 0) + *

+ * Sets the implementation for the Sum. + *

+ *

+ * This method must be activated before any data has been added - i.e., + * before {@link #addValue(double) addValue} has been used to add data; + * otherwise an IllegalStateException will be thrown. + *

+ * @param sumImpl the StorelessUnivariateStatistic instance to use for + * computing the Sum + * @throws IllegalStateException if data has already been added (i.e if n > + * 0) * @since 1.2 */ public void setSumImpl(StorelessUnivariateStatistic sumImpl) { @@ -425,7 +416,6 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { /** * Returns the currently configured sum of squares implementation - * * @return the StorelessUnivariateStatistic implementing the sum of squares * @since 1.2 */ @@ -434,26 +424,27 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { } /** - *

Sets the implementation for the sum of squares.

- *

This method must be activated before any data has been added - i.e., - * before {@link #addValue(double) addValue} has been used to add data; - * otherwise an IllegalStateException will be thrown.

- * - * @param sumsqImpl the StorelessUnivariateStatistic instance to use - * for computing the sum of squares - * @throws IllegalStateException if data has already been added - * (i.e if n > 0) + *

+ * Sets the implementation for the sum of squares. + *

+ *

+ * This method must be activated before any data has been added - i.e., + * before {@link #addValue(double) addValue} has been used to add data; + * otherwise an IllegalStateException will be thrown. + *

+ * @param sumsqImpl the StorelessUnivariateStatistic instance to use for + * computing the sum of squares + * @throws IllegalStateException if data has already been added (i.e if n > + * 0) * @since 1.2 */ - public void setSumsqImpl( - StorelessUnivariateStatistic sumsqImpl) { + public void setSumsqImpl(StorelessUnivariateStatistic sumsqImpl) { checkEmpty(); this.sumsqImpl = sumsqImpl; } /** * Returns the currently configured minimum implementation - * * @return the StorelessUnivariateStatistic implementing the minimum * @since 1.2 */ @@ -462,15 +453,18 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { } /** - *

Sets the implementation for the minimum.

- *

This method must be activated before any data has been added - i.e., - * before {@link #addValue(double) addValue} has been used to add data; - * otherwise an IllegalStateException will be thrown.

- * - * @param minImpl the StorelessUnivariateStatistic instance to use - * for computing the minimum - * @throws IllegalStateException if data has already been added - * (i.e if n > 0) + *

+ * Sets the implementation for the minimum. + *

+ *

+ * This method must be activated before any data has been added - i.e., + * before {@link #addValue(double) addValue} has been used to add data; + * otherwise an IllegalStateException will be thrown. + *

+ * @param minImpl the StorelessUnivariateStatistic instance to use for + * computing the minimum + * @throws IllegalStateException if data has already been added (i.e if n > + * 0) * @since 1.2 */ public void setMinImpl(StorelessUnivariateStatistic minImpl) { @@ -480,7 +474,6 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { /** * Returns the currently configured maximum implementation - * * @return the StorelessUnivariateStatistic implementing the maximum * @since 1.2 */ @@ -489,15 +482,18 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { } /** - *

Sets the implementation for the maximum.

- *

This method must be activated before any data has been added - i.e., - * before {@link #addValue(double) addValue} has been used to add data; - * otherwise an IllegalStateException will be thrown.

- * - * @param maxImpl the StorelessUnivariateStatistic instance to use - * for computing the maximum - * @throws IllegalStateException if data has already been added - * (i.e if n > 0) + *

+ * Sets the implementation for the maximum. + *

+ *

+ * This method must be activated before any data has been added - i.e., + * before {@link #addValue(double) addValue} has been used to add data; + * otherwise an IllegalStateException will be thrown. + *

+ * @param maxImpl the StorelessUnivariateStatistic instance to use for + * computing the maximum + * @throws IllegalStateException if data has already been added (i.e if n > + * 0) * @since 1.2 */ public void setMaxImpl(StorelessUnivariateStatistic maxImpl) { @@ -507,7 +503,6 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { /** * Returns the currently configured sum of logs implementation - * * @return the StorelessUnivariateStatistic implementing the log sum * @since 1.2 */ @@ -516,19 +511,21 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { } /** - *

Sets the implementation for the sum of logs.

- *

This method must be activated before any data has been added - i.e., - * before {@link #addValue(double) addValue} has been used to add data; - * otherwise an IllegalStateException will be thrown.

- * - * @param sumLogImpl the StorelessUnivariateStatistic instance to use - * for computing the log sum - * @throws IllegalStateException if data has already been added - * (i.e if n > 0) + *

+ * Sets the implementation for the sum of logs. + *

+ *

+ * This method must be activated before any data has been added - i.e., + * before {@link #addValue(double) addValue} has been used to add data; + * otherwise an IllegalStateException will be thrown. + *

+ * @param sumLogImpl the StorelessUnivariateStatistic instance to use for + * computing the log sum + * @throws IllegalStateException if data has already been added (i.e if n > + * 0) * @since 1.2 */ - public void setSumLogImpl( - StorelessUnivariateStatistic sumLogImpl) { + public void setSumLogImpl(StorelessUnivariateStatistic sumLogImpl) { checkEmpty(); this.sumLogImpl = sumLogImpl; geoMean.setSumLogImpl(sumLogImpl); @@ -536,7 +533,6 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { /** * Returns the currently configured geometric mean implementation - * * @return the StorelessUnivariateStatistic implementing the geometric mean * @since 1.2 */ @@ -545,26 +541,27 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { } /** - *

Sets the implementation for the geometric mean.

- *

This method must be activated before any data has been added - i.e., - * before {@link #addValue(double) addValue} has been used to add data; - * otherwise an IllegalStateException will be thrown.

- * - * @param geoMeanImpl the StorelessUnivariateStatistic instance to use - * for computing the geometric mean - * @throws IllegalStateException if data has already been added - * (i.e if n > 0) + *

+ * Sets the implementation for the geometric mean. + *

+ *

+ * This method must be activated before any data has been added - i.e., + * before {@link #addValue(double) addValue} has been used to add data; + * otherwise an IllegalStateException will be thrown. + *

+ * @param geoMeanImpl the StorelessUnivariateStatistic instance to use for + * computing the geometric mean + * @throws IllegalStateException if data has already been added (i.e if n > + * 0) * @since 1.2 */ - public void setGeoMeanImpl( - StorelessUnivariateStatistic geoMeanImpl) { + public void setGeoMeanImpl(StorelessUnivariateStatistic geoMeanImpl) { checkEmpty(); this.geoMeanImpl = geoMeanImpl; } /** * Returns the currently configured mean implementation - * * @return the StorelessUnivariateStatistic implementing the mean * @since 1.2 */ @@ -573,26 +570,27 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { } /** - *

Sets the implementation for the mean.

- *

This method must be activated before any data has been added - i.e., - * before {@link #addValue(double) addValue} has been used to add data; - * otherwise an IllegalStateException will be thrown.

- * - * @param meanImpl the StorelessUnivariateStatistic instance to use - * for computing the mean - * @throws IllegalStateException if data has already been added - * (i.e if n > 0) + *

+ * Sets the implementation for the mean. + *

+ *

+ * This method must be activated before any data has been added - i.e., + * before {@link #addValue(double) addValue} has been used to add data; + * otherwise an IllegalStateException will be thrown. + *

+ * @param meanImpl the StorelessUnivariateStatistic instance to use for + * computing the mean + * @throws IllegalStateException if data has already been added (i.e if n > + * 0) * @since 1.2 */ - public void setMeanImpl( - StorelessUnivariateStatistic meanImpl) { + public void setMeanImpl(StorelessUnivariateStatistic meanImpl) { checkEmpty(); this.meanImpl = meanImpl; } /** * Returns the currently configured variance implementation - * * @return the StorelessUnivariateStatistic implementing the variance * @since 1.2 */ @@ -601,30 +599,31 @@ public class SummaryStatistics implements StatisticalSummary, Serializable { } /** - *

Sets the implementation for the variance.

- *

This method must be activated before any data has been added - i.e., - * before {@link #addValue(double) addValue} has been used to add data; - * otherwise an IllegalStateException will be thrown.

- * - * @param varianceImpl the StorelessUnivariateStatistic instance to use - * for computing the variance - * @throws IllegalStateException if data has already been added - * (i.e if n > 0) + *

+ * Sets the implementation for the variance. + *

+ *

+ * This method must be activated before any data has been added - i.e., + * before {@link #addValue(double) addValue} has been used to add data; + * otherwise an IllegalStateException will be thrown. + *

+ * @param varianceImpl the StorelessUnivariateStatistic instance to use for + * computing the variance + * @throws IllegalStateException if data has already been added (i.e if n > + * 0) * @since 1.2 */ - public void setVarianceImpl( - StorelessUnivariateStatistic varianceImpl) { + public void setVarianceImpl(StorelessUnivariateStatistic varianceImpl) { checkEmpty(); this.varianceImpl = varianceImpl; } - + /** * Throws IllegalStateException if n > 0. */ private void checkEmpty() { if (n > 0) { - throw new IllegalStateException( - "Implementations must be configured before values are added."); + throw new IllegalStateException("Implementations must be configured before values are added."); } }