Пожалуйста, помогите с моим двумерным массивом исходного кода - PullRequest
0 голосов
/ 20 марта 2010

Вот что я сделал, но у меня есть несколько вопросов:

class masivins {
    public static void main (String args[]) {

        int mas[][] = {{0, 2, 7, 0, 8, 5, 3},
                       {0, 4, 0, 6, 0, 0, 0},
                       {0, 0, 0, 0, 3, 0, 0},
                       {7, 0, 0, 9, 1, 0, 7},
                       {5, 0, 4, 0, 0, 2, 0}};

        int nulmas[] =  new int [7]; 
        int nul=0; 

        for(int j=0; j<7; j++) {
            nul=0;
            for(int i=0; i<5; i++) {
                if(mas[i][j]==0) { 
                    nul++;          
                }
            }
            nulmas[j]=nul; 
        }
        for(int i=0; i<5; i++) {
            for(int j=0; j<7; j++) {
                System.out.println(mas[i][j]);
            }
            System.out.println();
        }
        System.out.println();

        for(int i=0; i<5; i++) {

            System.out.println("Zeros in each array column: " + nulmas[i]);
        }
        System.out.println();
    }
}

, поэтому мои вопросы:

  1. Почему после запуска проекта в каждом есть только 5 "нулей в каждомстолбец массива ..... "показано?
  2. Что и где мне нужно изменить в этом коде, чтобы получить номер столбца, в котором нули наименьшие?

Ответы [ 6 ]

2 голосов
/ 21 марта 2010

Вопрос 1 - посмотрите на ваш код:

for(int i=0; i<5; i++) {
    System.out.println("Zeros in each array column: " + nulmas[i]);
}

В частности, посмотрите на цикл. Сколько строк вы ожидаете , чтобы распечатать?

Вопрос 2: Вы можете сохранить «наименьшее число 0 в столбце массива» и «столбец, в котором появилось наименьшее количество 0» - затем обновить эти переменные в конце внутреннего цикла, в котором вы задали 1008 *.

1 голос
/ 21 марта 2010

Попробуйте:

 int leastZeroIndex = 0;

 for(int i=0;i<5;i++) {
   if (nul_mas[i] < nul_mas[leastZeroIndex])
     leastZeroIndex = i;
 }

 System.out.print(leastZeroIndex);

Хотя нет проверки, есть ли несколько строк с наименьшим количеством нулей.

1 голос
/ 21 марта 2010

Вы, кажется, очень близки к ответу на вопрос. Мне кажется, что вы настроили массив nul_mas, чтобы он содержал количество нулей в каждом столбце, поэтому возникает вопрос: "какой индекс nul_mas имеет наименьшее значение?". Вы можете сделать это с двумя переменными - одна для наименьшего значения, которое когда-либо было видно, другая для индекса, в котором она была замечена, - и цикл по этому массиву для просмотра каждого элемента по очереди. (Затем, когда у вас все получится, подумайте, что произойдет, если есть связь.)

1 голос
/ 21 марта 2010

1) потому что вы цикл от 0 до 4:

for(int i=0; i<5; i++) {

Если вы зациклились до 7, все значения будут распечатаны:

for(int i=0; i<7; i++) {
    System.out.println("Zeros in each array column: " + nulmas[i]);
}

2) вы можете сохранить индекс и минимальный счетчик. Счетчик min хранит минимальное количество нулей, индекс столбца, где это найдено:

int nulmas[] =  new int [7]; 
int nul=0; 
int minNuls=5;
int minIndex=0;

for(int j=0; j<7; j++) {
    nul=0;
    for(int i=0; i<5; i++) {
        if(mas[i][j]==0) { 
            nul++;          
        }
    }
    nulmas[j]=nul; 
    if (nul < minNul) {
        minNul = nul;
        minIndex = j;
    }
}
0 голосов
/ 21 марта 2010
    for(int i=0; i<5; i++) {

        System.out.println("Zeros in each array column: " + nulmas[i]);
    }
    System.out.println(); place there it

изменить его на:

int minElement = 0;
    for(int i=0; i<7; i++) {
        if (nulmas[i] < nulmas[minElement]) minElement = i;
        System.out.println("Zeros in each array column: " + nulmas[i]);
    }
    System.out.println(nulmas[minElement]);

лучше использовать "\ n", чтобы пропустить одну строку в консоли

0 голосов
/ 21 марта 2010

Мне кажется, что вам нужно создать несколько новых массивов, поэтому создайте массив для каждого столбца, а затем поместите в него числа для столбца. После этого просто выполните итерацию по этому массиву массивов, которые представляют столбцы и подсчитывают числа (для этого можно использовать метод, т.е. int count(int num, int[] arr).

int[][] mas  = ...; // (you have this already), it's [NO_OF_ARRS][NO_OF_COLS] with the data
int[][] colsarrs = new int[NO_OF_COLS][NO_OF_ARRS];

for (int i = 0; i < NO_OF_ARRS; i++) {
    for (int j = 0; j < NO_OF_COLS; i++) {
        colsarrs[j][i] = mas[i][j];
    }
}

int[] resultarr = new int[NO_OF_COLS];
for (int i = 0; i < NO_OF_COLS; i++) {
    resultarr[i] = count(0, colsarrs[i]);
}

int count(int num, int[] arr) {
    int count;
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] == num) ++count;
    }
    return count;
}

Сохраняет количество нулей в дополнительном массиве (resultarr), собранном из этой функции для каждого столбца. После этого перейдите по массиву и найдите наименьшее число и возьмите его индекс. Это ваш столбец с наименьшим количеством нулей.

int lowestcurr = 0;
for (int i = 0; i < NO_OF_COLS; i++) {
    if (resultarr[i] < resultarr[lowestcurr]) {
        lowestcurr = i;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...