我试图为我的程序找到模式,用户输入0到100之间的数量,我想要找到这些数字的模式,但每次都是我试图找到它给我一个3的模式,我发现了其他一切,我只需要模式的帮助。
import java.util.Scanner;
public class deveation {
public static void main(String Args[]) {
Scanner kbReader = new Scanner(System.in);
int sum = 0;
int bob[] = new int[101];
int total = 0;
int a = 0;
int min = 0;
int max = 100;
int mode = 0;
boolean stay_in_loop = true;
while (stay_in_loop) {
System.out.println("Please enter interger(s) from 0-100: ");
int number = kbReader.nextInt();
if (number < 0) {
stay_in_loop = false;
}
else {
total++;
bob[number]++;
}
}
int median = total / 2 + 1;
while (median > 0) {
median -= bob[a];
a++;
}
a--;
boolean findit = true;
while (findit) {
if (bob[min] != 0)
findit = false;
else
min++;
}
boolean findme = true;
while (findme) {
if (bob[max] != 0)
findme = false;
else
max--;
}
for (int p = 0; p < 101; p++) {
if (bob[p] > mode) {
mode = bob[p];
}
for (int j = 0; j < 101; j++)
if (bob[j] <= mode)
//I don't know why I'm getting three for this
{
}
}
for (int i = 0; i < 101; i++) {
sum += bob[i] * i;
}
System.out.println(sum);
System.out.println(sum /= total);
System.out.println(a);
System.out.println(min);
System.out.println(max);
System.out.println(mode);
//You should start putting down these comments
}
}
答案 0 :(得分:1)
您制作mode = bob[p]
,但bob[p]
只是数字中出现的次数。 mode
应该是p
。
例如,假设bob
数组为:
[2, 1, 3, 1, 1, 2]
这意味着0
出现两次,1
出现一次,2
出现三次,依此类推。在这种情况下,mode
是2
,它由数组索引给出,而不是由存储在数组中的值。
要查找模式,我们需要遍历计数数组(bob
),并保留两个变量mode
和最高count
直到现在。无需循环两次或使用嵌套循环。
int count = 0;
int mode = 0;
for (int p = 0; p < bob.length; p++) {
// If the count of the p element is greater than the greatest count until now
if (bob[p] > count) {
// Update the greatest count
count = bob[p];
// p is the new mode
mode = p;
}
}
答案 1 :(得分:1)
模式是最常重复的数字。我会摆脱你内在的for循环。
for (int p = 0; p<101; p++) {
if (bob[p]>mode) {
mode=bob[p];
}
}
我不确定你为什么说你总是得到三个。在上面的循环结束时,mode变量将包含bob数组中数字的最大计数。
然后,您可以循环浏览列表(或在循环时存储值)并打印出与您的模式值相匹配的数字。
for (int p = 0; p < 101; p++) {
if (bob[p] == mode) {
System.out.println("Mode Number: " + p);
}
}
请记住,该模式可以是多个号码。
答案 2 :(得分:0)
尝试使用类似哈希图的内容,其中键将是数字,值将是出现次数。你可以跟踪最高价值。你也应该能够在O(n)时间内完成这项工作,这意味着在数组的一个循环中。有很多在线寻找模式的例子。