2012-04-18 2 views
0

Я пытаюсь создать Java-метод, который будет рассматривать массив 2d и посмотреть, сколько раз число было введено более одного раза, а затем выводить счетчик.Java-подсчет повторяющихся чисел В массиве 2d

Поэтому, учитывая этот массив

1 2 3 3 
5 6 7 8 
8 45 9 45 
10 17 18 13 

метод будет возвращать счетчик 3.

До сих пор это то, что я есть

int dupe=0; 
    int chk1=0, chk2=0; 

    for (int row =0; row < dataTable.length; row ++) 
    {//for 1 

     for (int col = 0; col < dataTable[row].length; col++) 
     {//for 2 





      if (dataTable[row][col] == dataTable [chk1][chk2]) 
      {//if 

      dupe++; 
      }//end if 

     chk1++; 
     chk2++; 



    }//end for 2 

}//end for 1 
    dupe=dupe-1; 
return dupe; 

однако он не будет работать, если я не объявить Chk1 и Chk2 внутри второй 4, который просто повторно объявляет их каждый раз, когда проверка выполнения.

+0

что ты стараешься до сих пор? –

+5

Где ваш код? Это домашнее задание? – Jeffrey

+0

Вы считаете глобальное количество дубликатов или отдельных дубликатов? Кажется, вы получаете глобальные дубликаты. – Makoto

ответ

3

Как это может быть реализовано:

  1. Создайте карту для хранения увиденных номеров.
  2. Петля через каждую строку в массиве 2d.
  3. Цикл по каждому столбцу в 2d массива
  4. Если номер не был замечен раньше (не в карте), вставить карту со значением 1
  5. Если число было замечено ранее (на карте), значение приращения на карте запись
  6. Пронумеруйте значения на карте и количество номеров> 1; это значение является вашим ответом
1

Стратегия: Итерация по всему массиву и сравнение каждого элемента со всеми другими элементами. Соберите результаты в переменной. Поскольку я думаю, что это домашнее задание, я не могу дать вам код, но стратегии должно быть достаточно, чтобы вы начали.

0

Ну вы могли бы перебрать массив, просматривая каждую строку ...

for(int i = 0; i < rows; i++) { 
    for(int j = 0; j < columns; j++) { 
     // check 
    } 
} 

А затем проверить, если номер был повторен, сравнивая его со всеми другими числами, которые вы можете хранить где-нибудь еще ,

+0

Что-то еще может быть 'HashSet' или' TreeSet' из числа, которое вы уже нашли. –

+1

Похоже, что OP уже понимает, как итерации через 2d-массив. Это «решение» не отвечает на вопрос OP. –

0

Две интерпретации:

/** 
* The number of entries that are double of others. 
* When 4 threes occure, 3 threes are counted. 
*/ 
public static int moreThanOnce(int[][] matrix) { 
    Set<Integer> uniqueNumbers = new HashSet<Integer>(); 
    int n = 0; 
    for (int row = 0; row < matrix.length; ++i) { 
     n += matrix[i].length; 
     Collections.addAll(uniqueNumbers, matrix[i]); 
    } 
    return n - uniqueNumbers.size(); 
} 

/** 
* The number of different numbers appearing more than once. 
* When four appears 3 times and eight 4 times, then the result is 2. 
*/ 
public static int moreThanOnce2(int[][] matrix) { 
    Set<Integer> usedNumbers = new HashSet<Integer>(); 
    Set<Integer> doubleNumbers = new HashSet<Integer>(); 
    for (int[] row : matrix) { 
     for (int x : row) { 
      if (!usedNumbers.add(x)) { // Not added, already used 
       doubleNumbers.add(x); 
      } 
     } 
    } 
    return doubleNumbers.size(); 
} 
Смежные вопросы