2013-06-21 111 views
0

我明白沒有這樣的元素異常,但我不明白我做錯了什麼。我需要使用Tokenizer,以便可以讀取諸如「A-902」或「S-823」等令牌並在0處標識字符以確定員工所在的部門.Information.txt包含如下條目:沒有這樣的元素異常

簡河流,A-902,2001年5月16日,1,16.25
鮑勃·考克斯,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

要調用token.nextToken()這麼多次在你的while循環中。這就是讓程序變得瘋狂的原因。

你應該只使用一次,並把結果保存在臨時變量,並使用它。

+0

我以爲If語句只是檢查條件?謝謝我會在這方面做更多工作。 –

+0

@HermesTrismegistus。是的,你只檢查下一個令牌的條件。但是你閱讀的不僅僅是這些。 –

+0

再次感謝我一起玩。 –

0

每次通話時間token.nextToken(),你得到的字符串,你切分中的下一個標記。所以在你的代碼中,你在每個if語句中檢查一個不同的字符串。你需要做的只是存儲正確的標記並處理它。此外,您知道令牌生成器中的哪個令牌具有您想要的數據,因此不需要while循環,只需轉到您想要的令牌。最後,你的if-else結構對我來說看起來很奇怪,所以我改變了它,除非我錯過了我下面所做的更好的方式。所以像這樣的東西替換while循環:

String thisToken; 

// the first token is the employee name so skip that one 
token.nextToken(); 
// save the next token as its the one we want to look at 
thisToken = token.nextToken(); 

outFile.print(thisToken); 

if(thisToken.charAt(0)=='A'){ 
    outFile.print(thisToken); 
    outFile.print("Accounting "); 

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

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

}else if(thisToken.charAt(0)=='S'){ 
    outFile.print(thisToken); 
    outFile.print("Shipping"); 
} 
+0

你是!馬虎,... hehehe ..冷酷的傢伙......你稱'.nextToken'兩次。 –

+0

啊,是的,我看到,一個If/Else而不是嵌套if。這就說得通了。謝謝! –

+0

哈哈對不起,我提出了最後的答案,當它完成了一半...這應該解決您的問題 – Sloppy

相關問題