0
import java.util.Scanner; 
import java.util.Arrays; 
public class Improved { 

    //I resize the array here so that it only counts inputs from the user
    //I want to ignore the 0 input from the user 
            //I think the error happens here or in my main method
    public static double[] resizeArray(double[] numbers, double size) {  
        double[] result = new double[(int)size];
        for (int i = 0; i < Math.min(numbers.length, size); ++i) {
            result[i] = numbers[i];
        }
        return result; 
    }

    //compute average nothing is wrong here
    public static double getAverage( double[] numbers) { 
        double sum = 0;
        for (int i = 0; i < numbers.length; ++i) 
            sum += numbers[i]; 
        double average = sum/numbers.length; 
        return average; 
    }

    //SD nothing is wrong here
    public static double getSD( double[] numbers, double average) { 
        double sd = 0; 
        for ( int i = 0; i < numbers.length; ++i) 
            sd += ((numbers[i] - average)*(numbers[i] - average)/ numbers.length); 
        double standDev = Math.sqrt(sd); 
        return standDev; 
    }

    //maximum nothing is wrong here
    public static double getMax( double[] numbers) { 
    double max = numbers[0]; 
    for (int i = 1; i < numbers.length; ++i)
        if (numbers[i] > max){
            max = numbers[i];
    }
    return max; 
    }

    //minimum nothing is wrong here
    public static double getMin( double[] numbers) { 
    double min = numbers[0]; 
    for (int i = 1; i < numbers.length; ++i)
        if (numbers[i] < min) {
            min = numbers[i];
        }
    return min; 
    }

    //median value nothing is wrong here
    public static double getmed( double[] numbers) { 
        double median;
        if (numbers.length % 2 == 0) 
            median = (((numbers[numbers.length/2 - 1]) 
                + (numbers[numbers.length/2]))/2);
        else
            median = numbers[numbers.length/2];

        return median; 
        }
//the problem is in the main method i think or in the call method to resize
public static void main(String[] args) { 

    Scanner input = new Scanner(System.in); 
    double[] statArr = new double[99]; 
    double size = 0;
    int i = 0;
    System.out.println("Type your numbers: ");
        double number = input.nextDouble(); 
        //I don't want the zero in the array, I want it to be excluded
        while (number != 0){
            statArr[i] = number;
            i++; 
            number = input.nextDouble();
            ++size;
        if ( size == statArr.length) { 
            statArr = resizeArray(statArr, statArr.length * 2); 
        }
        ++size;
    }
    statArr = resizeArray(statArr, size);

    java.util.Arrays.sort(statArr);

    double average = getAverage(statArr);

    System.out.println( "The average is " + getAverage(statArr));

    System.out.println( "The standard deviation is " +  getSD(statArr, average));

    System.out.println( "The maximum is "  + getMax(statArr));

    System.out.println( "The minimum is " + getMin(statArr));
    }
}

// 数学部分の計算には何の懸念もありませんが、うまくいかないので、配列は while ループを終了する 0 を無視します。つまり、ユーザーが数字の 0 を入力するまで、すべての数字を含める必要があります。それ以外はすべて正しいです。どうもありがとうございました!

4

1 に答える 1

2

あなたは++size2回持っています。これは、resizeArrayメソッドが正しく機能しないことを意味します。

double[] result = new double[(int)size];

ここでは、実際に必要なものよりも多くを割り当てています。これが、配列にゼロが含まれている理由です。Java 配列は 0 に初期化されます (数値プリミティブ型の場合)。

Giodude が既にコメントしているように、可能な限り配列の代わりにList実装 (通常は) を使用することをお勧めします。ArrayList

また、完全sizeに宣言してそのキャストを回避することもできます(そして、非常にわずかなメモリを節約できます) 。どこにもint使用していません。double

于 2013-11-06T21:42:14.200 に答える