用java写数组的模式方法[已关闭]

5us2dqdw  于 2022-12-21  发布在  Java
关注(0)|答案(1)|浏览(106)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
2天前关闭。
此帖子已在2天前编辑并提交审核,无法重新打开帖子:
原始关闭原因未解决
Improve this question
我必须写一个方法来找到数组中的模式,所以我创建了一个嵌套的for循环来遍历数组,但是我遇到了绑定异常。
这是我得到的:线程"main"中出现异常。
以下示例的预期输出为Mode is 5

// Test data
    int[] a4 = {1,5,6,5}; 
      System.out.println("Mode is " + ArrayOfSunshine.mode(a4));
public static int mode(int[] ints) {
    int j = 0;
    for (int i = 0; i < ints.length; i++) {
        for (int k = 0 ; k < ints.length; k--) {
            if (ints[i] == ints[k]) {
                j = i;
            }
        
            return j;
        }
    }
    
    return 0;
}
qmelpv7a

qmelpv7a1#

k在内部循环中变为负值,因为您正在 * 递减 *,并且您的测试仅防止k * 超过 * ints.length
我建议把它分解一下,让我们计算一个数组中的值。

private static int count(int value, int[] ints) {
    int c = 0;
    for (int i = 0; i < ints.length; i++) {
        if (ints[i] == value) c++;
    }
    return c;
}

现在您只需要确定哪个值具有最高计数。

public static int mode(int[] ints) {
    int max_count = 0;
    int m;
    for (int i = 0; i < ints.length; i++) {
        int c = count(ints[i], ints);
        if (c > max_count) {
            max_count = c;
            m = ints[i];
        }
    }
    
    return m;
}

相关问题