2013-03-09 3 views
0

내 스파 스 매트릭스에서이 값을 정렬하는 방법이 있습니까? 순간스파 스 매트릭스 정렬

0 0 0 0 8 2 

0 0 0 19 11 0 

0 11 0 13 0 0 

0 18 0 0 7 0 

0 0 0 0 4 0 

0 0 3 0 0 0 

나는이 있습니다

if (matrix[i][j] < 20) 
System.out.print(matrix[i][j] + " "); 
else 
System.out.print(" " + 0 + " "); 

값이 다음에 공백 값 전에 왼쪽되지 않습니다 1 ~ 9이므로 내 정렬을 망쳐 놨 경우 제가하는 데 문제는이다 . 다른 if 문을 삽입 할 수 있지만이 작업을 더 쉽고/깔끔하게 처리하는 방법이 궁금한가요?

도움

는 감사

+1

체크 아웃 정렬됩니다. –

답변

0

(자바 선형 대수학) la4j에서 작업하는 동안 나는 비슷한 작업을 해결 한을 감상 할 수있다. la4j는이 필요를 위해 재정의 된 toString() 메소드를 사용합니다. 따라서 콘솔 출력은 디버그 모드에서 기본을 사용하고 la4j는 릴리스 버전에 대해 빠르고 효과적인 스트림을 가지고 있기 때문에 느린 것을 사용하기로 결정했지만 안전한 알고리즘입니다. 인쇄 i에 필요 charachers의 수와 같은

  1. 계산 formats 배열 :

    @Override 
    public String toString() { 
    
        final int precision = 3; 
    
        int formats[] = new int[columns]; 
    
        for (int i = 0; i < rows; i++) { 
         for (int j = 0; j < columns; j++) { 
          long value = (long) unsafe_get(i, j); 
          int size = Long.toString(value).length() + precision + 2; 
          formats[j] = size > formats[j] ? size : formats[j]; 
         } 
        } 
    
        StringBuilder sb = new StringBuilder(); 
    
        for (int i = 0; i < rows; i++) { 
         for (int j = 0; j < columns; j++) { 
          sb.append(String.format("%" + Integer.toString(formats[j]) 
            + "." + precision + "f", unsafe_get(i, j))); 
         } 
         sb.append("\n"); 
        } 
    
        return sb.toString(); 
    } 
    

    그래서, 알고리즘의 두 단계가 있습니다 : 여기에 코드가합니다 (precision는 분리 후 자리의 번호입니다) colomn`String.format` 당신을 위해 무엇을 할 수

  2. 인쇄 매트릭스
관련 문제