Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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
数组值求和java_Java_Math - Fatal编程技术网

数组值求和java

数组值求和java,java,math,Java,Math,我在一个长度为8的数组中输入,比如说,如果试验数为100,它的形式可能是93 5 2 0 0 0 0,但无论数组中的值是多少,我只得到0.6。如果有人能看到我是否犯了愚蠢的错误,那就太好了。我用for循环尝试过,但一直得到0.6 static void getMetric(int[]a, int trials){ double metric = 0; int i =0; while(i<8){ if(i==0){ double

我在一个长度为8的数组中输入,比如说,如果试验数为100,它的形式可能是93 5 2 0 0 0 0,但无论数组中的值是多少,我只得到0.6。如果有人能看到我是否犯了愚蠢的错误,那就太好了。我用for循环尝试过,但一直得到0.6

static void getMetric(int[]a, int trials){
    double metric = 0;
    int i =0;
    while(i<8){
        if(i==0){
            double x = (a[0] / trials) - (2 / 15);
            metric += Math.abs(x);
            i++;
        }
        else if(i>0 && i<7){
            double x = (a[i] / trials) - 0.1;
            metric += Math.abs(x);
            i++;
        }
        else{
            double x = (a[7] / trials) - (2 / 15);
            metric += Math.abs(x);
            System.out.println(""+metric);
            i++;
        }
    }
}
static void getMetric(int[]a,int-trials){
双度量=0;
int i=0;
而(i0&&i使用整数除法(5/3=1;2/15=0)

因此,您应该进行
a[0]/(双)试验,而不是
a[0]/(双)试验

您应该使用
2/15.0
等,而不是
2/15.0

您使用整数除法(5/3=1;2/15=0)

因此,您应该进行
a[0]/(双)试验,而不是
a[0]/(双)试验


您应该使用
2/15.0
等,而不是
2/15

看起来您需要
双除法,而不是
int
-除法。请记住:

int a = 96;
int b = 100;
double c = a / b; //will be 0.0!
因此,下面的程序也应该这样做,但我认为更正确(而且更短):

static void getMetric(int[]a,int-trials){
双指标=数学abs(((双)a[0])/试验)-(2/15));
对于(int i=1;i<7;i++){
公制+=数学绝对值(((双)a[i])/试验-0.1);
}
公制+=数学abs(((双)a[7])/试验)-(2/15));
系统输出打印项次(“+公制);
}
而这一点更为可靠和稳健:

static void getMetric(int[] a, int trials){
    double metric = calcMetricDiff(a[0], trials, 2.0 / 15.0);

    for (int i = 1; i < a.length - 1; i++) {
        metric += calcMetricDiff(a[i], trials, 0.1);
    }   

    metric += calcMetricDiff(a[a.length-1], trials, 2.0 / 15.0);

    System.out.println(""+metric);
}   

private static double calcMetricDiff(double val, int trials, double diff) {
    return Math.abs((val / trials) - diff);
}   
static void getMetric(int[]a,int-trials){
双指标=calcMetricDiff(a[0],试验,2.0/15.0);
for(inti=1;i
看起来您需要的是
双除法,而不是
int
-division。请记住:

int a = 96;
int b = 100;
double c = a / b; //will be 0.0!
因此,下面的程序也应该这样做,但我认为更正确(而且更短):

static void getMetric(int[]a,int-trials){
双指标=数学abs(((双)a[0])/试验)-(2/15));
对于(int i=1;i<7;i++){
公制+=数学绝对值(((双)a[i])/试验-0.1);
}
公制+=数学abs(((双)a[7])/试验)-(2/15));
系统输出打印项次(“+公制);
}
而这一点更为可靠和稳健:

static void getMetric(int[] a, int trials){
    double metric = calcMetricDiff(a[0], trials, 2.0 / 15.0);

    for (int i = 1; i < a.length - 1; i++) {
        metric += calcMetricDiff(a[i], trials, 0.1);
    }   

    metric += calcMetricDiff(a[a.length-1], trials, 2.0 / 15.0);

    System.out.println(""+metric);
}   

private static double calcMetricDiff(double val, int trials, double diff) {
    return Math.abs((val / trials) - diff);
}   
static void getMetric(int[]a,int-trials){
双指标=calcMetricDiff(a[0],试验,2.0/15.0);
for(inti=1;i
double x=(double)((a[7]/trials)-(2/15))?不是吗:a[0]/(double)trials?不,这不起作用:(double)(2/15)==0.0,因为它首先进行整数除法,然后转换为double double x=(double)((a[7]/trials)-(2/15))?不是吗:a[0]/(double)trials不起作用:(double)(2/15)==0.0,因为它首先进行整数除法,然后转换为double。此方法是否始终返回0.6?它似乎没有返回值,所以您在哪里看到0.6?抱歉,我的意思是它每次在打印行打印0.6。此方法是否始终返回0.6?它似乎没有返回值,所以您在哪里看到0.6?对不起,我的意思是它每次在打印行打印0.6