Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不忽略一个值? import java.util.Scanner; 导入java.util.array; 公共类{ //我在这里调整数组的大小,以便它只计算来自用户的输入 //我想忽略用户的0输入 //我认为错误发生在这里或我的主要方法中 公共静态双[]大小调整数组(双[]数字,双大小){ double[]结果=新的double[(int)大小]; 对于(int i=0;i_Java_Arrays_Methods - Fatal编程技术网

不忽略一个值? import java.util.Scanner; 导入java.util.array; 公共类{ //我在这里调整数组的大小,以便它只计算来自用户的输入 //我想忽略用户的0输入 //我认为错误发生在这里或我的主要方法中 公共静态双[]大小调整数组(双[]数字,双大小){ double[]结果=新的double[(int)大小]; 对于(int i=0;i

不忽略一个值? import java.util.Scanner; 导入java.util.array; 公共类{ //我在这里调整数组的大小,以便它只计算来自用户的输入 //我想忽略用户的0输入 //我认为错误发生在这里或我的主要方法中 公共静态双[]大小调整数组(双[]数字,双大小){ double[]结果=新的double[(int)大小]; 对于(int i=0;i,java,arrays,methods,Java,Arrays,Methods,//我对计算数学部分没有任何顾虑,但我似乎无法做到这一点,因此我的数组忽略了结束while循环的0。换句话说,我希望在用户输入数字0之前包含每个数字。其他一切都是对的。多谢各位 您有两次++size。这意味着您的resizeArray方法无法正常工作: import java.util.Scanner; import java.util.Arrays; public class Improved { //I resize the array here so that it onl

//我对计算数学部分没有任何顾虑,但我似乎无法做到这一点,因此我的数组忽略了结束while循环的0。换句话说,我希望在用户输入数字0之前包含每个数字。其他一切都是对的。多谢各位

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

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));
    }
}
在这里,你分配的比你实际需要的更多。这就是为什么数组中会出现零。Java数组初始化为0(对于数字基元类型)

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


另外,
size
可以声明为
int
,并避免使用该类型(并节省一些极少量的内存),您不会在任何地方将其用作
double

我想您正在使用。我对此表示怀疑。如果用户输入0.0,则条件编号=0将为假。毫无疑问,使用ArrayList和Collections.sort()而不是手动调整大小的数组(ArrayList就是这样做的!)可能会更好。另外,你应该在调试器中运行你的代码,找出为什么它不能达到你期望的效果。@Giodude你是对的,先生。绝对正确。接得好。我坚持我的意见,使用ArrayList可以避免这个问题。@Giodude使用列表肯定更好。Java101:除非你真的不能,否则一定要使用列表!
double[] result = new double[(int)size];