需要帮助我写的代码(需要了解)

时间:2014-02-07 07:10:52

标签: java

下面的代码是我为课堂作业写的。 我还没有从讲师那里学到关于阵列的知识 数据。我已经了解了如何使用数组,但不太确定 关于数据呢。 我已经在下面的代码中标记了我需要帮助的位置。 虽然我已经设法写了它,但仍然不确定它是否是最佳的。 有人可以帮助我改善它吗?

*我之前曾询问过如何找到模式,人们告诉我要用它来做 地图实现,我试图这样做,但我的大脑不适合它..任何建议?

=============================================== ==================================

import java.util.Scanner;
import java.util.Arrays;


public class CodeVer2 {


public static void main(String[] args) 
{
    Double num1, num2, num3, num4, num5, sum, avg;

    Scanner keyboard = new Scanner(System.in);
    System.out.println("Enter the first number:");
    num1 = keyboard.nextDouble();
    System.out.println("Enter the seond number:");
    num2 = keyboard.nextDouble();
    System.out.println("Enter the third number:");
    num3 = keyboard.nextDouble();
    System.out.println("Enter the fourth number:");
    num4 = keyboard.nextDouble();
    System.out.println("Enter the fifth number:");
    num5 = keyboard.nextDouble();
    keyboard.close();

    double[] num = new double[5]; // array named num is declared with 5 variables
    num[0] = num1;
    num[1] = num2;
    num[2] = num3;
    num[3] = num4;
    num[4] = num5;
    Arrays.sort(num);

    double[] data = {num1, num2, num3, num4, num5}; // I need help from here,
    int mode = 0;
    int[] index = new int[999];
    int maximum = Integer.MIN_VALUE;

    for (int i = 0; i < data.length; i++){
        index[(int) data[i]]++;
    }
    for (int i = 0; i < index.length; i++){
        if(maximum < index[i]){
            maximum = index[i];
            mode = i;
        }
    }                                               // to here.

    sum = num[0] + num[1] + num[2] + num[3] + num[4];
    avg = sum/5;

    System.out.println(" ");
    System.out.println("Sum:" + sum);
    System.out.println("Avg:" + avg);
    System.out.println("Max:" + num[4]);
    System.out.println("Min:" + num[0]);
    System.out.println("Median:" + num[2]);
    System.out.println("Mode:" + mode);
    }
}

2 个答案:

答案 0 :(得分:0)

所以double[]所做的就是建立一个可以包含0个或更多数字的数组。把它想象成一张纸,上面有一排盒子。你不能添加更多的盒子或拿走它们,但你可以在每个盒子里写一个不同的数字。

double[] data = {num1, num2, num3, num4, num5}; // I need help from here,

这会创建一行框,并将{}中的数字写入行。它会自动将行创建为正确的大小,以便将内容保存在括号中。

int mode = 0;
int[] index = new int[999];
int maximum = Integer.MIN_VALUE;

这会创建一个新的框列表,这些框可以包含一个整数,其中有999个。

for (int i = 0; i < data.length; i++){
    index[(int) data[i]]++;
}

这会循环播放您的数据。 data [i]表示“使用编号为i的方框中的值,从第一个方框开始计算,第一个方框为0”。

它将该double值转换为整数,然后查找与该整数对应的框。它在该位置添加一个值。请注意,这里的算法存在缺陷,如果有人输入超过999的数字,那么你将没有足够的盒子。

for (int i = 0; i < index.length; i++){
    if(maximum < index[i]){
        maximum = index[i];
        mode = i;
    }
}               

现在循环遍历索引数组中的每个框。由于早期的值被覆盖,因为你实际上从未计算过最大值,它实际上只是给出了数组框999中的值,并将模式设置为999.这听起来不是很有用......

答案 1 :(得分:0)

首先,我重写了您的代码,以便于阅读。 缺少的是:这种“模式”是什么意思。我无法从您的代码中获取它。

以下代码并不完美。缺少许多错误处理和边界检查。我把它作为练习留给你。

因此,尝试了解我的代码的作用。想想“模式”的含义以及如何计算它。

import java.util.Scanner;
import java.util.Arrays;


public class CodeVer2 {

    static final String CARDNAME[] = { "first", "second", "third", "fourth", "fifth" };
    static final int NUM_ITEMS = 5;

public static void main(String[] args)
{
    double num[], sum, avg, max, min;
    double mode = 0.0;  // don't know what this is
    int i;

    num = new double[NUM_ITEMS];
    sum = 0;
    max = Double.NEGATIVE_INFINITY;
    min = Double.POSITIVE_INFINITY;

    Scanner keyboard = new Scanner(System.in);
    for (i = 0; i < NUM_ITEMS; ++i) {
         System.out.println("Enter the " + CARDNAME[i] + " number:");
         num[i] = keyboard.nextDouble();
         sum += num[i];
         if (max < num[i]) max = num[i];
         if (min > num[i]) min = num[i];
    }
    avg = sum / NUM_ITEMS;
    Arrays.sort(num);

    keyboard.close();

    System.out.println(" ");
    System.out.println("Sum:" + sum);
    System.out.println("Avg:" + avg);
    System.out.println("Max:" + max);
    System.out.println("Min:" + min);
    System.out.println("Median:" + num[NUM_ITEMS/2]);
    System.out.println("Mode:" + mode);
    }
}