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