Roxanne Roxanne - 27 days ago 8
Java Question

I have an array of doubles that I need to get a median but it keeps giving me an int conversion error

I have no idea how to get the median without this method, but it keeps saying conversion error. I know it's because I'm dividing the numbers.length by 2, but I can't figure out how to make the program understand it's a double. It's at the bottom where I keep getting the error. It's my last if else statement. I have searched everywhere so I'm sorry if this is a repeat, but I couldn't find one. I can't convert to ints either because my array consists of doubles. Thanks in advance to whoever helps me.

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

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

This prints out:

The Sum of the Array is 733.0
The Average of the Array is 73.3
The Variance of the Array is 369.66
The Standard Deviation is 19.227
The median is 79.0