2013-06-21 3 views
0

해당 요소 예외가 없다는 것을 이해하지만 잘못된 것을 이해하지 못합니다. "A-902"또는 "S-823"과 같은 토큰을 읽을 수 있도록 Tokenizer를 사용해야하고 직원이 어느 부서에 있는지 확인하기 위해 문자 0을 식별합니다. Information.txt에는해당 요소 예외 없음

과 같은 항목이 포함되어 있습니다.

제인 강, A-902, 2001년 5월 16일, 1, 16.25
당신은 너무 많은 token.nextToken()를 호출 밥 콕스, S-823, 1990년 6월 21일, 2, 17.50

import java.util.Scanner; 
import java.io.*; 
import java.util.StringTokenizer; 

    public class CreateFile { 

    public static void main(String[] args)throws FileNotFoundException{ 

     File newFile = new File("Information.txt"); 
     Scanner readFile = new Scanner(newFile); 
     PrintWriter outFile = new PrintWriter("Department.txt"); 

     String[] employees = new String[9]; 

     while(readFile.hasNext()){ 

      for(int i=0; i<employees.length; i++){ 
       employees[i] = readFile.nextLine(); 
      } 
     } 

     for(int k=0; k<employees.length; k++){ 

     StringTokenizer token = new StringTokenizer(employees[k],","); 

     while(token.hasMoreTokens()){ 

       outFile.print(token.nextToken()); 

       if(token.nextToken().charAt(0)=='A'){ 
        outFile.print(token.nextToken()); 
        outFile.print("Accounting "); 
       }else{ 

       if(token.nextToken().charAt(0)=='H'){ 
        outFile.print(token.nextToken()); 
        outFile.print("Human Resources "); 
       }else{    

       if(token.nextToken().charAt(0)=='P'){ 
        outFile.print(token.nextToken()); 
        outFile.print("Production "); 
       }else{    

       if(token.nextToken().charAt(0)=='S'){ 
       } 
        outFile.print(token.nextToken()); 
        outFile.print("Shipping"); 
       } 
       } 
       } 

     } 
     } 
     readFile.close(); 
     outFile.close(); 

    } 



    } 
+0

'token.nextToken()'을 호출 할 때마다 다음 토큰을 리턴하고 다시 호출 할 준비가 된 다음 토큰으로 진행합니다. 반복마다 한 번만 호출하려고합니다. –

+0

맞습니다. –

답변

3

귀하의 while 루프 횟수. 이것이 프로그램을 미쳐 버리는 이유입니다.

그냥 한 번 사용하고 임시 변수에 결과를 저장하고 사용해야합니다.

+0

If 문이 방금 조건을 확인했다고 생각 했습니까? 덕분에 더 많은 작업을 할 수 있습니다. –

+0

@HermesTrismegistus. 네, 다음 토큰에 대해서만 조건을 확인했습니다. 그러나 당신은 그 이상을 읽고 있습니다. –

+0

다시 한번 감사 드리겠습니다. –

0

token.nextToken()을 호출 할 때마다 토큰 화 한 문자열에서 다음 토큰을 가져옵니다. 따라서 코드에서 모든 if 문에서 다른 문자열을 검사합니다. 당신이해야 할 일은 올바른 토큰을 저장하고 처리하는 것입니다. 또한 tokenizer의 어느 토큰에 원하는 데이터가 있는지 알고 있으므로 while 회 돌이가 필요하지 않으므로 원하는 토큰으로 이동하십시오. 마지막으로, 당신의 if-else 구조가 이상하게 보입니다. 그래서 아래에서했던 것을 놓치지 않는 한 그것을 바꿨습니다. while 루프를 다음과 같이 바꾸십시오.

+0

당신이 있습니다! 엉성한 ..., hehehe .. 냉담한 친구 ... 당신은'.nextToken'을 두 번 불렀습니다. –

+0

아아 네, 보입니다. if/Else는 중첩 된 경우가 아니라. 그건 의미가 있습니다. 감사! –

+0

하하 죄송합니다. 반쯤 끝났을 때 마지막 대답이 나왔습니다. 문제가 해결 될 것입니다. – Sloppy

관련 문제