下面的代码是我为课堂作业写的。 我还没有从讲师那里学到关于阵列的知识 数据。我已经了解了如何使用数组,但不太确定 关于数据呢。 我已经在下面的代码中标记了我需要帮助的位置。 虽然我已经设法写了它,但仍然不确定它是否是最佳的。 有人可以帮助我改善它吗?
*我之前曾询问过如何找到模式,人们告诉我要用它来做 地图实现,我试图这样做,但我的大脑不适合它..任何建议?
=============================================== ==================================
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);
}
}
答案 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);
}
}