java - 不忽略一个值?

标签 java arrays methods

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。其他一切都正确。非常感谢!

最佳答案

您有两次++size。这意味着您的 resizeArray 方法将无法正常工作:

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

在这里,您分配的数量超出了您实际想要的数量。这就是为什么你的数组中会出现零。 Java 数组初始化为 0(对于数字基元类型)。

正如 Giodude 已经评论的那样,我建议您尽可能使用 List 实现(通常是 ArrayList)而不是数组。

此外,size 可以完全声明为 int 并避免该转换(并节省一些极小的内存),您不会将其用作 double 任何地方。

关于java - 不忽略一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19823251/

相关文章:

java - 雅 cocoa .计算测试套件中每个测试用例的覆盖率信息

javascript - 将数组的字段与javascript中具有不同长度的另一个数组合并

javascript - 获取数组中没有 double 值的元素

c# - 如何使用方法?

c# - 有人可以解释一下这个 C# 构造函数语法 - public Class1(Class 2 Obj) : this(obj. ToString()) 吗?

java - Gremlin 获取共享同一顶点的边

java - JAXB 标签包装

java - JFormattedTextField,接受值[0.1, 100],数字书写不舒服

c++ - 自定义排序算法c++

java - Java 8 中接口(interface)方法的隐式声明是什么?