2011-07-03 23 views
1

私は長さ8の配列を使用しています。試行回数が100なら93 5 2 0 0 0 0 0のようになりますが、配列に含まれる値は何でも0.6バック。もし誰かが私が愚かな誤りを犯しているかどうかを知ることができれば、それはすばらしいだろう。私はforループで試しましたが、0.6を得続けます。合計配列値java

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++; 
     } 
    } 
} 
+0

このメソッドは常に0.6を返しますか?それは戻り値を持っていないようです、あなたは0.6を見ていますか? – aldrin

+0

申し訳ありませんが、プリントラインに毎回0.6をプリントすることを意味していました。 – user528676

答えて

2

を持つ必要があります。

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); 
} 

と1つは、よりreableかつ堅牢である::、私は思う(短い)ので、次のプログラムは、同じことを行う必要がありますが、より正確

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

を:覚えてい

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); 
} 
3

整数除算(5/3 = 1; 2/15 = 0)を使用します。

a[0]/trialsの代わりに、a[0]/(double) trialsが必要です。

代わりの2/15あなたはdouble -divisionなくint -divisionを必要とするように見えます2/15.0など

+0

ダブルx =(ダブル)((a [7]/trials) - (2/15))? – user528676

+0

それではない:a [0] /(double)trial? – KarlP

+0

いいえ、これは機能しません:(double)(2/15)== 0.0これは、最初に整数除算を行い、次にdoubleに変換するためです –