如何使用Java查找数组的模式

时间:2015-04-01 17:13:14

标签: java arrays math mode

我试图为我的程序找到模式,用户输入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
    }

}

3 个答案:

答案 0 :(得分:1)

您制作mode = bob[p],但bob[p]只是数字中出现的次数。 mode应该是p

例如,假设bob数组为:

[2, 1, 3, 1, 1, 2]

这意味着0出现两次,1出现一次,2出现三次,依此类推。在这种情况下,mode2,它由数组索引给出,而不是由存储在数组中的值。

要查找模式,我们需要遍历计数数组(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)时间内完成这项工作,这意味着在数组的一个循环中。有很多在线寻找模式的例子。