2012-06-10 3 views
0

나는 내 파일의 끝에 도달 한 경우 확인하려고 노력하지만, 빈 문자열과 조건이 당신에 두 줄을 읽고파일의 끝을 확인하면 예상대로 작동하지 않습니다

public void readEquation(String fileName) { 
     File aFile = new File(fileName); 
     String line = null; 
     int cnt = 0; 
     try { 
      FileReader reader = new FileReader(aFile); 
      BufferedReader bufferedReader = new BufferedReader(reader); 
      while ((line = bufferedReader.readLine()) != null) {  
       //but line gets null 
       intoMap(line, cnt); 
       cnt++; 
      } 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
    } 
+3

정확히 작동하지 않는 기능은 무엇입니까? 'line'은 while 블록에서'null'이되어서는 안됩니다. – user905686

+0

더 나은 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. 소스 코드를 읽을 파일로 사용하십시오. –

답변

0

작동하지 않습니다 연속 : 하나는 루프 상태이고, 다른 하나는 루프 본문입니다. 조건에서 읽은 단어는 무시되고 사용되지 않습니다. 두 번째 줄의 값을 검사하는 것은 없습니다. 당신은 항상 사용하기 전에 회선을 점검

while ((line = bufferedReader.readLine()) != null) {  
    intoMap(line, cnt); 
    cnt++; 
} 

이 방법 :

보통 사람들은이 루프이 방법을 쓰기.

+0

그것은 첫 번째 변종이었고 작동하지 않습니다. –

+1

@ Den-Ben - 나는 정중하게 다시 시도 할 것을 제안합니다. 왜냐하면이 경우라면, 당신은 틀린 일을 했어야했기 때문입니다. –

+0

나는 시도했다. 내 질문에서 볼 수있는 모든 코드. –

0
while ((bufferedReader.readLine()) != null) {  
       line = bufferedReader.readLine(); //but line gets null 

두 줄을 읽었습니다. 난 그냥이 코드

BufferedReader bufferedReader=null; 
    try { 
     String line = null; 
     bufferedReader = new BufferedReader(new FileReader("d:\\ranks.txt")); 
     while ((line=bufferedReader.readLine()) != null) {  
      System.out.println(line); 
     } 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally{ 
     try { 
      bufferedReader.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

을 테스트

예 그것은 일 -

String line=null; 
while ((line=bufferedReader.readLine()) != null) { 
    //now line stores line from file or null if file doesn't have new line 

편집과 같은 그 사용의 tmp 문자열을 방지하기 위해.

+0

첫 번째 변종이었고 작동하지 않습니다. –

+0

@ Den-Ben : "* 작동하지 않습니다"*는 막연합니다. 좀 더 구체적이어야합니다. –

+0

@ Den-Ben "작동하지 않음"부분이 발생했을 때 콘솔에서 회선을 인쇄하려고 했습니까? 아니면 당신이 알고리즘에서 기대하는 것과 우리가 실제로하는 일을 말해 줄 수 있습니다. – Pshemo

0

코드에 문제가있는 것은 while 조건에서 bufferedReader.readLine()을 실행하면 이미 해당 행을 읽는 것입니다.

이 작업을 수행해야합니다

public void readEquation(String fileName) { 
    File aFile = new File(fileName); 
    String line = null; 
    int cnt = 0; 
    try { 
     FileReader reader = new FileReader(aFile); 
     BufferedReader bufferedReader = new BufferedReader(reader); 
     while ((line = bufferedReader.readLine()) != null) {  // only reads once 
      intoMap(line, cnt); 
      cnt++; 
     } 
    } catch (IOException e1) { 
     e1.printStackTrace(); 
    } 
} 
+0

첫 번째 변형이며 작동하지 않습니다. –

1

을 당신은 잘못 두 줄 하나가 아닌 시간을 읽고있다. 루프의 조건은 한 줄만 읽은 다음 루프 안의 다른 한 줄을 읽습니다. 이 변경 제안 :

public void readEquation(String fileName) { 
     File aFile = new File(fileName); 
     String line = null; 
     int cnt = 0; 
     try { 
      FileReader reader = new FileReader(aFile); 
      BufferedReader bufferedReader = new BufferedReader(reader); 
      line = bufferedReader.readLine(); 
      while (line != null) {     
       intoMap(line, cnt); 
       cnt++; 
       line = bufferedReader.readLine(); 
      } 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
    } 
0

이것은 당신을 위해 작동합니다.

while ((line = bufferedReader.readLine()) != null) {  

        intoMap(line, cnt); 
        cnt++; 
       } 
관련 문제