2012-04-18 3 views
0

2d 배열을보고 숫자가 두 번 이상 입력 된 횟수를보고 그 결과를 출력하는 Java 메소드를 생성하려고합니다.자바 카운팅 중복 숫자 2d 배열에서

은 따라서 방법 3의 카운트를 반환이 배열

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

주어진.

지금까지이 난 그냥 그들에게 검사가 실행될 때마다 선언하고 다시 두 번째 4 내부 CHK1 및 chk2를 선언하지 않는 한 실행되지 않습니다 그러나 내가

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; 

을 것입니다.

+0

당신이 지금까지 시도합니까? –

+5

코드는 어디에 있습니까? 이 숙제가 있니? – Jeffrey

+0

전체 중복 수 또는 개별 중복 수를 계산합니까? 당신이 글로벌 중복을 얻는 것 같습니다. – Makoto

답변

3

는이 구현 될 수있는 방법 :

  1. 볼 번호를 저장하는지도를 만듭니다.
  2. 2 차원 배열의 각 행을 순환합니다. 2 차원 배열의 각 칼럼을 통해
  3. 루프
  4. 수가지도를 (MAP)에서, 증분 값 전에 본 되었다면 번호 (되지 맵), 값 1
  5. 지도에 삽입하기 전에 본되지 않았다면
  6. 엔트리
  7. 지도의 루프 스루 값 및 카운트 넘버> 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(); 
} 
관련 문제