java - 如何编写代码来计算数组中特定项的出现次数?

标签 java repeat

enter image description here

以上是我的任务是创建。

基本上,我正在填充一个数组,并计算每个 元素的出现次数。但是,根据说明,这意味着它必须准确并且不能输出错误的出现次数。如果您认为这是夸夸其谈,那对您有好处。那不是我的问题。

我的代码:

public class CalcOccurrence {

    public static int findIt(int[] list, int i) {
            int[] occurence = {0,0,0,0,0,0,0,0,0,0};
            occurence[i] = list[i];
            boolean hasChecked = false;
            int numberOfTimes = 0;

            for(int j=0; j < list.length; j++) {
                if(j!=9) {
                    if(list[i]==occurence[++j]) {
                        hasChecked=true;
                    }
                }
            }
            if(hasChecked=false) {
                for(int y = 0; y < list.length; y++) {
                    if(list[i]==list[y]) {
                        numberOfTimes++;
                    }
                }
            }

            return numberOfTimes;
        }


        public static void main(String[] args) {
            Scanner userInput = new Scanner(System.in);
            int[] list = new int[10];
            int[] counter = new int[10];

            for(int i = 0; i < list.length; i++) {
                System.out.println("Please input an integer between 1 and 100: ");
                list[i] = userInput.nextInt();
            }

            userInput.close();

            for(int n = 0; n < list.length; n++) {
                if(list[n]!=0) {
                    counter[n] = findIt(list, n);
                    if(counter[n] > 1) {
                        System.out.println(list[n] + " occurs " + counter[n] + " times.");
                    } else {
                        System.out.println(list[n] + " occurs " + counter[n] + " time.");
                    }
                }
            }
        }
}

我已经修改了这个两次,但我仍然无法找到解决这个问题的正确方法。我不能使用任何高级 Java 调整或代码,这些调整或代码会使我看起来像是在欺骗或基本上从网上窃取它。我严格来说只能使用上面代码中的内容。

我上面写的是我尝试实现这个公式的尝试。我想我可以并行制作两个数组,以保持其相邻索引中出现的次数。因此,假设我为列表 [0] 输入 1,并且还有其他 4 次出现。 findIt() 方法应返回值 4,该值将分配给 count[0]。但是,此方法不起作用,并且会为每个实例输出不一致的情况。它会为每个实例重复就是我的意思。所以,我发明了一个数组来检查数字是否已经被检查过,但是失败了。

我已经查看了以前针对类似问题的一些答案,但代码要么太高级,要么我无法实现我的目的。

最佳答案

您的输入仅由 1 到 100 之间的整数组成。因此您可以使用单个数组来存储计数来解决此问题。

首先,创建一个可以存储 100 个元素的数组,每个元素对应一个可能的值:

int[] count = new int[100];

默认情况下,数组中的每个位置都将初始化为 0。

现在遍历 list,为找到的每个数字的对应位置加一:

for (int number : list) {
    count[number - 1]++;
}

我们执行 number - 1,这样我们就可以将 1 的计数存储在 count[0] 中,对于 2count[1] 中,直到 100count[99] 中。

要打印某个数字在 list 中出现了多少次,您只需要做:

System.out.println(count[number - 1]);

请注意,您的示例输出已排序。这非常适合这种方法,因为我们在计算元素时隐式地对输入数组进行了排序。要打印数字及其计数,您只需执行以下操作:

for (int i = 0; i < count.length; i++) {
    System.out.println((i + 1) + ": " + count[i]);
}

这将打印从 1 到 100 的每个数字,即使是那些出现次数为 0 的数字。一对夫妇的检查应该足以只打印出现 1 次或多次的数字并处理“时间”和“次数”要求。

这个算法叫做计数排序,你可以找到更多关于它的信息here .

关于java - 如何编写代码来计算数组中特定项的出现次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29522575/

相关文章:

JavaScript:编写一个接受输入字符并使用递归返回该字符重复 5 次的函数

javax.xml.transform.Transformer 正在删除所需的空白(xml 到文本转换)

java - 使用预制模型文件预测在 WEKA 中动态创建的数据

java - 如何在不使用任何循环的情况下交换二维数组的第一个和最后一个字符串?

OpenGL glColorPointer 重复颜色?

android - 重复的背景图像被拉伸(stretch)

forms - zip 样式 @repeat 嵌套表单

c++ - 每 'x' 毫秒重复一次循环

java - MongoDB + Spring 集成

java - 大量空/样板类(异常、事件)是否会显着影响 Android 性能/大小?