2016-07-16 5 views
1

저는 Java에 익숙하지 않아서 이것이 작동하지 않는 이유를 이해하고자했습니다. 왜 sys 출력이 완벽하게 작동 하나 버퍼 된 작성자는 그렇지 못합니까?버퍼링 된 작성자 대 sys 출력 인쇄

 The Determinant is: 5 
    The Determinant is: 3 
    �The Determinant is: 64 
� �� ���The Determinant is: 270 
������ ���The Determinant is: 0 
�������� ����The Determinant is: 270 
������ The Determinant is: 0 
    The Determinant is: 0 

sys 인 밖으로 인쇄 출력 :

Matrix read: 
--------------------------------------- 
    5 
--------------------------------------- 
Matrix read: 
--------------------------------------- 
    2  3 
--------------------------------------- 
    5  9 
--------------------------------------- 
Matrix read: 
--------------------------------------- 
    3 -2  4 
--------------------------------------- 
    -1  5  2 
--------------------------------------- 
    -3  6  4 
--------------------------------------- 
난 그냥 (.txt 파일에서) 두/

//print the input matrix to the user 

System.out.println("Matrix read: "); 
System.out.println("------------------" + 
        "---------------------"); 
for (int i = 0; i < size; i++) { 
    for (int j = 0; j < size; j++) { 
     System.out.printf("%5d ", a[i][j]); 
     bw.write(a[i][j]); 
     bw.flush(); 
    } 

    //print a blank line 
    System.out.println(); 

버퍼 작가의 출력 사이의 차이를 이해하는 것을 시도하고있다

답변

0

당신이 형식하여 출력 같은 방식으로 필요 (당신은 당신의 BufferedWriter에 기록 같은 일을하려는 경우). 당신은 당신이

bw.write(System.lineSeparator()); 
처럼 (당신이 System.out.println 전화) 새로운 라인 당신이 동일 할 경우를 추가해야합니다,

bw.write(String.format("%5d ", a[i][j])); 

처럼 String.format 뭔가를 사용하여 수

1

description of that method

한 글자를 씁니다.

매개 변수 : C - INT 문자 그래서 그 방법은 텍스트로 정수 값을 기록하지 않습니다

을 쓸 수 지정. 대신 정수로 표시된 유니 코드 문자를 씁니다. 의미있는 텍스트로 쓰는하려면

, 당신은이처럼 String로 변환해야합니다

String text = String.valueOf(a[i][j]); 
bw.write(text, 0, text.length()); 

이는 사람이 읽을 수있는 표현으로 넣어 것입니다.

0

write()으로 바이트를 씁니다. 첫 번째 행렬에는 숫자 값 5가 있습니다. write(5)을 사용하는 경우, 사용중인 텍스트 편집기가 어떻게 든 표시되는 인쇄 할 수없는 문자 인 바이트 값 5를 작성합니다. hexdump 유틸리티를 사용하는 경우, 그 값은 실제로는 5 바이트라는 것을 알 수 있습니다.

printf은 숫자 서식 문자열을 숫자 서식으로 지정하는 형식 문자열 인 숫자가 5 인 숫자로 5 문자를 사용합니다. %5d 여기에는 적어도 5 개의 너비가있는 문자열 형식의 숫자 앞에 공백이 채워집니다. 그 다음에 공간이 있습니다.

버퍼링 된 작성기에서 동일한 효과를 얻으려면 PrintWriter에 넣고 동일한 printf 방법과 arugments를 사용하면 동일한 결과가 나타납니다. BufferedWriter에 문자열을 숫자로만 포맷하려면 숫자를 문자열로 변환해야합니다 (예 : e). 지. Integer.toString(5).getBytes()으로 변경 한 다음 write() 메서드에 따라이 바이트 배열을 씁니다.

0

System.outPrintStream; 동일한 동작을 얻으려면 파일 이름으로 구체화 된 (또는 PrintWriter)을 사용하고 print/println/format 메쏘드를 사용하십시오.

BufferedWriter.write(int c) 메서드는 int 매개 변수를 문자로 해석하므로 32을 전달하면 공백 문자가 인쇄됩니다. 그게 네가 여기서 원하는게 아니 겠지.대신

bw.write(a[i][j]); 

와 원시 int를 작성