2014-09-19 5 views
0

모든 값으로 채워진 행렬이 주어지면 임의의 행렬을 생성하기 위해 데이터를 임의로 추출해야합니다 (각 위치에 널값으로 초기화 됨).자바에서 행렬 위치 값을 확인하는 방법은 무엇입니까?

public void randomLogic(String[][] givenMatrix){ 

     for (int i = 0; i < matrix.length; i++) { 
      for (int j = 0; j < matrix[i].length; j++) { 
       int positioni = this.randInt(0, 1); 
       int positionj = this.randInt(0, 1); 
       int x = this.randInt(0, 3); 
       int y = this.randInt(0, 2);    

      /*In here lies the reported issue while checking if empty. */ 
      while (!this.randomMatrix[x][y].isEmpty()) { 
        x = this.randInt(0, 3); 
        y = this.randInt(0, 2); 
        this.randomMatrix[x][y] = givenMatrix[positioni][positionj]; 
       } 
      } 
     } 
    } 

가 나는 또한 다음과 같이 시도했다 : : while(this.randomMatrix[x][y] != null)와 코드가 바로 분해합니다 (randomMatrix 내) 위치가 null과 다른 경우 다음과 같이 확인하면서 문제가있다. 모든 해결 논리는 예상대로 작동합니다 (결함 부분이 있지만 작동하지 않는다면 작동하지만). 유일한 문제는 유효성 검사입니다. 어떤 위치가 평가되고 있는지에 관계없이 항상 작동을 멈 춥니 다.

다른 방법으로 매트릭스 위치 값을 확인할 수 있습니까?

답변

1

givenMatrix에서 임의의 값을 가져 오려고합니다 (결과적으로 일부는 반복됩니다) 또는 givenMatrix를 구체적으로 무작위로 지정 하시겠습니까?

후자 인 경우이를 다르게 적용 할 것입니다. 우선, 하나의 선형 배열이나리스트에서 givenMatrix의 모든 값을 모으십시오. 그런 다음이 배열을 무작위로 배열 할 수 있습니다. 원래 행렬의 모든 값이 이미 무작위로 지정된 큰 배열의 행 항목이 남아 있습니다.

그런 다음 새 행렬의 각 행과 열을 완료 할 때까지 배열의 각 요소를 순서대로 취하여 체계적으로 새 무작위 화 된 행렬을 채울 수 있습니다.

이 방법을 선택하는 것이 더 쉽고 고정 된 단계로 완료됩니다. 랜덤 포지션을 채우는 것이 아니라, 동일한 장소에서 2 번 칠해 채우기 때문에, 모든 스팟을 치기 전까지 무작위 배치해야합니다.

+0

글쎄, 당신의 관점과 주어진 솔루션은 꽤 좋습니다! 나는 그렇게 생각하지 않았습니다. 그리고 나는이 방법이 해결책의 일부일지라도 더 잘 작동 할 것이라고 생각합니다. 문제는 예를 들면 다음과 같습니다. "세 개의 행렬이 주어 지므로 새 행렬에 무작위로 배정 할 것이고 반복 된 값의 제약이 없으므로 그 점에 신경 쓰지 않을 것입니다." 그러나 반복 된 값을 피하는 것에 대해 지적한 것은 좋은 접근 방법입니다. 나는 모든 것을 고려할 것이다 : D 감사. –

1

(당신이 후, 새로운 행렬의 값을 반복하는 대신 무작위 배열의 각 요소를 복용 상관하지 않는 경우 또한, 당신은 단순히이 배열의 임의의 위치마다 선택할 수 있습니다) String [] [] randomMatrix를 클래스 수준 멤버 변수로 선언 했습니까? randomMatrix를 올바르게 선언 한 경우 isEmpty() 및! = null 검사가 올바르게 작동해야합니다.

+0

헬퍼 클래스 내에서 선언되었으며 기본 클래스 인 다른 클래스에서 초기화되었습니다. 다음과 같이 선언되었습니다. public int rows = 0; public int columns = 0; public String [] [] randomMatrix = new String [행] [열]; 그래서 이러한 값을 채우기 위해 getter와 seter를 사용하므로 randomMatrix를 디버깅하는 동안 'null'값이 있습니다. –

+0

randomLogic (String [] [] givenMatrix) 메서드에서 'this'키워드를 사용하여 randomMatrix에 액세스하고 있습니다. 그래서 당신은 randomLogic 메소드와 같은 클래스에 있다고 가정합니다. 다른 방법으로는 a) randomLogic 메서드 자체에서 randomMatrix를 선언하고 나중에 반환 할 수 있습니다. 그런 다음이 값을 사용하여 값을 설정하십시오. 또는 b) 다른 파라미터 String [] [] randomMatrix를 randomLogic 메소드에 건네 주어, 나중에, 갱신 된 값을 돌려줍니다. – sravtej

관련 문제