【发布时间】:2017-03-26 20:08:53
【问题描述】:
如果没有这种方法,我不知道如何获得中位数,但它一直说转换错误。我知道这是因为我将 numbers.length 除以 2,但我不知道如何让程序理解它是双精度数。它在我不断收到错误的底部。这是我最后的 if else 声明。我到处都搜索过,所以如果这是重复的,我很抱歉,但我找不到。我也无法转换为整数,因为我的数组由双精度数组成。在此先感谢帮助我的人。
import static java.lang.Math.*;
import java.util.Scanner;
import java.util.Arrays;
public class ComputingArrays
{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
double [] numbers = {33.5, 67.5, 67.5, 88.0, 46.0, 94.5, 77.5, 83.0, 95.0, 80.5}; // declare, allocate memory, and store values
double n = numbers.length; // get length of array
Arrays.sort(numbers);
System.out.println("The Array of Numbers are :");
double sum = 0; //initiate and declare sum
for (int i = 0; i < n; i++) { //loop through n numbers
System.out.println(numbers[i]);
sum = sum + numbers[i];
}
final double average = sum / n;
System.out.println("The Sum of the Array is " + sum);
System.out.println("The Average of the Array is " + average);
double var1 = 0;
double var2 = 0;
double varSum = 0;
for (int i = 0; i < n; i++) {
var1 = numbers[i] - average;
var2 = var1 * var1; // to square
varSum = varSum + var2; // to get sum of all squared differences
}
double variance = varSum / n;
System.out.printf("The Variance of the Array is %.2f %n", variance); //%.2f rounds two decimal places
System.out.printf("The Standard Deviation is %.3f %n", Math.sqrt(variance));
double middle = numbers.length / 2.0;
double median = 0.0;
if (numbers.length % 2 == 1){
median = numbers[middle];
System.out.println("The median is " + median);
}
else {
median = (numbers[middle-1] + numbers[middle]) / 2;
System.out.println("The median is " + median);
}
}
}
【问题讨论】:
-
如果除以
2.0而不是2会发生什么? -
我实际上只是编辑了我的帖子,把它放在那里。它也不起作用。
-
您还使用双精度数索引数组,这有点奇怪...
middle应该是int。尝试打印middle的值。 -
您可以像 d.j.brown 建议的那样将
middle明确声明为int。或者您可以将其转换为整数int middleAsInt = (int)middle;,然后使用middleAsInt。基本上你得到了错误,因为你试图使用 double 作为索引,并且数组中的索引应该始终是 int。 -
我的老师希望我们将这些数字专门用于学位,我认为在数组中使用双精度数很奇怪,如果这就是你的意思。当我尝试打印 middle 的值时,什么也没有出来。