Суммирование значений массива Java - PullRequest
1 голос
/ 03 июля 2011

Я передаю массив длиной 8, скажем, если испытания равны 100, он может иметь форму 93 5 2 0 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++;
        }
    }
}

Ответы [ 2 ]

3 голосов
/ 03 июля 2011

Вы используете целочисленное деление (5/3 = 1; 2/15 = 0).

Так что вместо a[0] / trials вы должны иметь a[0] / (double) trials;

Вместо 2 / 15 у вас должно быть 2 / 15.0 и т. Д.

2 голосов
/ 03 июля 2011

Похоже, вам нужно double -разделение, а не int -разделение. Помните:

int a = 96;
int b = 100;
double c = a / b; //will be 0.0!

поэтому следующая программа должна делать то же самое, но, я думаю, более корректно (и короче):

static void getMetric(int[] a, int trials){
    double metric = Math.abs((((double)a[0]) / trials) - (2 / 15));

    for (int i = 1; i < 7; i++) {
        metric += Math.abs((((double)a[i]) / trials) - 0.1);
    }

    metric += Math.abs((((double)a[7]) / trials) - (2 / 15));

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

и этот еще более надежный и надежный:

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);
}   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...