【问题标题】:I have an array of doubles that I need to get a median but it keeps giving me an int conversion error我有一个双打数组,我需要得到一个中位数,但它一直给我一个 int 转换错误
【发布时间】: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 的值时,什么也没有出来。

标签: java arrays int double


【解决方案1】:

您应该将变量 n 设为 int。数组长度始终为 int 您的问题是您正在使变量中间双精度。稍后将该变量称为索引号。但索引号只能是 int。

【讨论】:

  • 你的意思是写成int n = numbers.length吗?我刚刚尝试过,还尝试将双打中间和中位数更改为整数,但它仍然给我错误。我想这是因为我的数组是双精度数,但这是老师告诉我们要使用的数字。
【解决方案2】:

索引数组时需要int 而不是double,因为5.5 等值不是有效索引。

有效

int middle = numbers.length / 2;
System.out.println(numbers[middle]);

无效

double middle = numbers.length / 2.0;
System.out.println(numbers[middle]);

【讨论】:

  • 糟糕。对不起,我不是故意的。它仍然说转换错误。是因为我的数组中有双打吗?
【解决方案3】:
import static java.lang.Math.*;
import java.util.Scanner;
import java.util.Arrays;
public class HelloWorld
{
    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;
    int middleIndex = (int)middle;
    if (numbers.length % 2 == 1){
        median = numbers[middleIndex];
        System.out.println("The median is " + median);
    }
    else {
        median = (numbers[middleIndex-1] + numbers[middleIndex]) / 2;
        System.out.println("The median is " + median);
    }
}
}

打印出来:

数组的总和是 733.0
数组的平均值为 73.3
数组的方差为 369.66
标准差是 19.227
中位数为 79.0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-09
    • 2017-07-11
    • 2018-08-07
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    相关资源
    最近更新 更多