java - 二维数组,查找数组中重复次数最多的数字

标签 java arrays loops 2d

我确实尝试使用 if/else 语句,我保留了该语句,但将其注释掉,以便您仍然可以看到它。我意识到 if/else 的问题不仅在于它是一种暴力方法,而且我认为我没有涵盖所有可能的情况。我认为必须有一个更优雅的循环解决方案,但循环从来都不是我的强项,我需要帮助来编写它。

public class stuff {
    public static int getMostRepeatedNumber(int[][] array) {

        int num = 100;

        if(array.length == 0){
            num = -1;
        }

        int [] numberOfTimes = new int[9];

            for(int i = 0; array.length > i; i++){
                for(int j = 0; array[i].length > j; j++){

                if(array[i][j] == 0){
                      numberOfTimes[0]++;
                }
                else if(array[i][j] == 1){
                     numberOfTimes[1]++;

                }else if(array[i][j] == 2){
                    numberOfTimes[2]++;

                }else if(array[i][j] == 3){
                    numberOfTimes[3]++;

                }else if(array[i][j] == 4){
                    numberOfTimes[4]++;

                }else if(array[i][j] == 5){
                    numberOfTimes[5]++;

                }else if(array[i][j] == 6){
                    numberOfTimes[6]++;

                }else if(array[i][j] == 7){
                    numberOfTimes[7]++;

                }else if(array[i][j] == 8){
                    numberOfTimes[8]++;

                }else if(array[i][j] == 9){
                    numberOfTimes[9]++;

                }
            }
        }



            for(int x = 0; x < array.length; x++){

                while(numberOfTimes[x] > numberOfTimes[x+1]){
                     num = x;
                     break;
                }


                   /* if(numberOfTimes[x] >= numberOfTimes[x+1] ){
                     num = 0;

                }else if(numberOfTimes[x+1] >= numberOfTimes[x+2]){
                    num = 1;

                }else if(numberOfTimes[x+2] >= numberOfTimes[x+3]){
                    num = 2;

                }else if(numberOfTimes[x+3] >= numberOfTimes[x+4]){
                    num = 3;

                }else if(numberOfTimes[x+4] >= numberOfTimes[x+5]){
                    num = 4;

                }else if(numberOfTimes[x+5] >= numberOfTimes[x+6]){
                    num = 5;

                }else if(numberOfTimes[x+6] >= numberOfTimes[x+7]){
                    num = 6;

                }else if(numberOfTimes[x+7] >= numberOfTimes[x+8]){
                    num = 7;

                }else if(numberOfTimes[x+8] >= numberOfTimes[x+9]){
                    num = 8;

                }

                else{
                    num = 9;

                }*/
            }

        return num; 
    }
}

最佳答案

  • 具有 100 行且每行为空的数组是空数组;在这种情况下你的程序会返回 100。如果您的程序结构正确,则不需要特殊情况。
  • 由于您有单位数正数,因此您需要的只是一个包含 10 个计数的数组:
<小时/>
int[] counts = new int[10];
for (int r = 0 ; r != array.length ; r++) {
    for (int c = 0 ; c != array[r].length ; c++) {
        counts[array[r][c]]++;
    }
}

此时,您已经有了一个包含 10 个计数器的数组。寻找最高的一个:

int max = 0;
int val = -1;
for (int i = 0 ; i != 10 ; i++) {
    if (counts[i] > max) {
         max = counts[i];
         val = i;
    }
}

// If you did not see any number because the array was empty, val remains -1.
System.out.println(val);

关于java - 二维数组,查找数组中重复次数最多的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18689632/

相关文章:

java - 我的程序不允许我调用不同类的方法

java - HashMap 值变得无效?

java - 我使用 google 登录与 firebase 进行身份验证,现在我想显示当前用户保存的数据,但它不起作用

c++ - 我的数组有错误的值

python - 如果我有多个最小数字并且想要两个索引,如何在 python 中找到数组中最小数字的索引?

javascript - 从变量javascript创建变量

java - 创建一个显示 0-101 并将其数字之和分别存储到该索引中的数组循环

java - Volley错误在Android Java Firebase中发送通知

java - 在 Android Studio 中使用 Web Api 检索 Json 数据

c - 如何在C中移动打印的字符?