我怎样才能找到数组中的模式?
How can i find the mode in an array?
这个程序的基本原理是从用户那里输入 6 个数字,将它们存储在一个数组中,计算它们的均值和众数。还要计算有多少数字大于平均值。
我的程序代码是我错的地方
我的意思是正确的,但我的模式有问题。
package p18;
进口java.util.Arrays;
导入 java.util.Scanner;
public class P18 {
public static void main(String[] args) {
Scanner S=new Scanner(System.in);
int[] arr1=new int [6];
for (int i = 0; i < 6; ++i) {
int g = S.nextInt();
arr1[i] = g;
}
int input=6;
double total=0d;
double mean;
for(int i=0;i<input;i++)
{
total=total+arr1[i];
}
mean= total/input;
System.out.println("the mean is:" + mean);
PROBLEM STARTS FROM HERE MODE PORTION
int max=0;//problem starts from here
int maxFreq=0;
Arrays.sort(arr1);
max = arr1[arr1.length-1];
int[] count = new int[max + 1];
for (int i = 0; i < arr1.length; i++) {
count[arr1[i]]++;
}
for (int i = 0; i < count.length; i++) {
if (count[i] > maxFreq) {
maxFreq = count[i];
}
}
for (int i = 0; i < count.length; i++) {
if (count[i] == maxFreq) {
return i;
}}
return -1;
}}
您必须询问要向用户询问的每个数字,如果您想要均值,则需要使用浮点数或双精度数。
Scanner S = new Scanner(System.in);
double mean, total;
double input = 6;
double arr1 = new double[input];
for (int i = 0;i<input;++i){
arr[i] = S.nextDouble();
}
for(int i=0;i<input;i++)
{
total=total+arr1[i];
}
mean= total/input;
System.out.println("the mean is:" + mean);
你认为你在哪里读取 6 个整数?您只调用 S.nextInt() 一次并且不使用它的 return 值。这应该在您的循环中完成以读取多个输入并对它们进行处理。
您根本没有将输入存储到数组中。您需要添加如下内容来存储用户输入:
Scanner S=new Scanner(System.in);
int[] arr1=new int [6];
for (int i = 0; i < 6; ++i) {
int g = S.nextInt();
arr1[i] = g;
}
int input=6;
double total=0d;
double mean;
for(int i=0;i<input;i++)
{
total=total+arr1[i];
}
mean= total/input;
System.out.println("the mean is:" + mean);
我还把均值和总和改成双倍,这样你就可以得到均值的小数,否则会向下舍入。
求均值很容易;其他答案已经涵盖了。
您还需要确保使用循环为数组收集 6 个值,并为所有这些值调用 nextInt()
。
更难的部分可能是模式。我看到解决模式的方法是:
1) 对数组进行排序。
2) 创建一个 int 来保存当前模式的值,并创建另一个 int 来保存该模式的出现次数。您还需要一个计数器 int。
3) 使用循环,运行 遍历排序后的数组。对于数组中的每个数值,计算它出现的次数。由于它是按排序顺序排列的,每次值发生变化时,您就知道您已经计算了所有该值。检查出现次数是否大于当前最大出现次数,如果是,则更改出现次数值和众数。
这个程序的基本原理是从用户那里输入 6 个数字,将它们存储在一个数组中,计算它们的均值和众数。还要计算有多少数字大于平均值。 我的程序代码是我错的地方
我的意思是正确的,但我的模式有问题。
package p18;
进口java.util.Arrays; 导入 java.util.Scanner;
public class P18 {
public static void main(String[] args) {
Scanner S=new Scanner(System.in);
int[] arr1=new int [6];
for (int i = 0; i < 6; ++i) {
int g = S.nextInt();
arr1[i] = g;
}
int input=6;
double total=0d;
double mean;
for(int i=0;i<input;i++)
{
total=total+arr1[i];
}
mean= total/input;
System.out.println("the mean is:" + mean);
PROBLEM STARTS FROM HERE MODE PORTION
int max=0;//problem starts from here
int maxFreq=0;
Arrays.sort(arr1);
max = arr1[arr1.length-1];
int[] count = new int[max + 1];
for (int i = 0; i < arr1.length; i++) {
count[arr1[i]]++;
}
for (int i = 0; i < count.length; i++) {
if (count[i] > maxFreq) {
maxFreq = count[i];
}
}
for (int i = 0; i < count.length; i++) {
if (count[i] == maxFreq) {
return i;
}}
return -1;
}}
您必须询问要向用户询问的每个数字,如果您想要均值,则需要使用浮点数或双精度数。
Scanner S = new Scanner(System.in);
double mean, total;
double input = 6;
double arr1 = new double[input];
for (int i = 0;i<input;++i){
arr[i] = S.nextDouble();
}
for(int i=0;i<input;i++)
{
total=total+arr1[i];
}
mean= total/input;
System.out.println("the mean is:" + mean);
你认为你在哪里读取 6 个整数?您只调用 S.nextInt() 一次并且不使用它的 return 值。这应该在您的循环中完成以读取多个输入并对它们进行处理。
您根本没有将输入存储到数组中。您需要添加如下内容来存储用户输入:
Scanner S=new Scanner(System.in);
int[] arr1=new int [6];
for (int i = 0; i < 6; ++i) {
int g = S.nextInt();
arr1[i] = g;
}
int input=6;
double total=0d;
double mean;
for(int i=0;i<input;i++)
{
total=total+arr1[i];
}
mean= total/input;
System.out.println("the mean is:" + mean);
我还把均值和总和改成双倍,这样你就可以得到均值的小数,否则会向下舍入。
求均值很容易;其他答案已经涵盖了。
您还需要确保使用循环为数组收集 6 个值,并为所有这些值调用 nextInt()
。
更难的部分可能是模式。我看到解决模式的方法是:
1) 对数组进行排序。
2) 创建一个 int 来保存当前模式的值,并创建另一个 int 来保存该模式的出现次数。您还需要一个计数器 int。
3) 使用循环,运行 遍历排序后的数组。对于数组中的每个数值,计算它出现的次数。由于它是按排序顺序排列的,每次值发生变化时,您就知道您已经计算了所有该值。检查出现次数是否大于当前最大出现次数,如果是,则更改出现次数值和众数。