Как создать метод, который принимает двумерный массив в качестве параметра и отображает индекс строки с большинством нулей? - PullRequest
0 голосов
/ 21 августа 2011

Как мне создать метод, который принимает двумерный массив в качестве параметра и отображает индекс строки с наибольшим количеством нулей?У меня есть программа, которая компилируется.Это просто отображает неверный результат.Метод countZeros() подсчитывает количество нулей в каждой строке.Мне нужно сравнить каждый счет со следующим, поэтому я создал count и count2.Местоположение большего числа будет сохранено в rowNum.Я не уверен, что я делаю неправильно.Я думаю, что это может быть неправильно индексации.

Вот мой код:

public class P118 
{

    public static void main(String[]args)
    {

        int[][]num = {{0,3,6,0,0}, {1,3,8,9,8}, {9,9,9,0,8}, {3,7,9,9,9}}; 

    System.out.print(rowWithMostZeros(num));

    }

    public static int rowWithMostZeros(int[][]arr)
    {
        int count = 0, count2 = 0, rowNum = -1;

        for(int row = 0; row<arr.length;row++)
        {

            count = countZeros(arr[row]);

            if(count>count2)
            {

            rowNum = row;
            }

        }
        for(int i=0; i<arr.length;i++)
        {

            count2 = countZeros(arr[i]);

        }

        return rowNum;
    }
    public static int countZeros(int[]x)
    {
        int count = 0;

        for(int i = 0; i<x.length;i++)
        {
            if(x[i]==0)
            {
              count++;

            }
        }


        return count;
    }

}

Ответы [ 3 ]

0 голосов
/ 21 августа 2011

Любой код, который подсчитывает вхождения, может работать следующим методом:

  1. Начните с использования либо первой строки, либо неверных данных в качестве 'max'
  2. Проверьте,другие значения больше.Если они есть, замените количество 'max' (количество) и 'номер строки' на это.

Вот код, который сначала устанавливает значения в первую строку, являющуюся max,и затем проверяет, имеют ли другие строки больше нулей ::1009 *

public static int rowWithMostZeros(int[][]arr)
    {
        int mostZeroCount = countZeros(arr[0];
        int rowNum = 0;

        for(int row = 1; row<arr.length;row++)
        {
            int count = countZeros(arr[row]);

            if(count>mostZeroCount)
            {
                rowNum = row;
                mostZeroCount = count;
            }

        }
        return rowNum;
    }

Проблема с оригинальным методом заключалась в том, что он всегда устанавливал count как следующее значение, которое имело более одного 0, не сравнивая сфактическая максимальная сумма 0, замеченная ранее.Следовательно, в конце он просто вернул бы последнюю строку, в которой был хотя бы один 0 (в данном случае это была строка 2, третья строка)

0 голосов
/ 21 августа 2011

Вы должны использовать переменную count2 для хранения максимального количества нулей во всех строках, чтобы сравнить его со следующей строкой.Для этого вам необходимо присвоить ему текущий счетчик внутри блока if, если «счетчик» больше count2.Я изменил ваш код ниже, используя maxCount и currentCount, для большей ясности.Второй цикл в вашем коде не нужен, я не совсем понял, почему вы это сделали.

 
public static int rowWithMostZeros(int[][]arr){
        int currentCount = 0, maxCount = 0, rowNum = -1;
        for(int row = 0; row maxCount){
                maxCount = currentCount;
                rowNum = row;
        }
        return rowNum;
}</p>

<code>public static int countZeros(int[]x){
    int count = 0;
    for(int i = 0; i<x.length;i++){
        if(x[i]==0){
            count++;
        }
    }
    return count;
}

0 голосов
/ 21 августа 2011

Попробуйте это:

public static int rowWithMostZeros(int[][] arr) {

    if (arr == null || arr.length < 1) {
        return -1;
    }

    int rowWithMostZeros = 0;
    int count = countZeros(arr[0]);

    for (int i = 1; i < arr.length; i++) {
        int count2 = countZeros(arr[i]);
        if (count2 > count) {
            rowWithMostZeros = i;
        }
    }

    return rowWithMostZeros;
}

public static int countZeros(int[] arr) {
    int count = 0;
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] == 0) {
            count += 1;
        }
    }
    return count;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...