2014-02-16 51 views
0

我讀的,看起來像這樣的交易文件:的Java NoSuchElementException異常使用字符串標記

1112, D 
4444, A, Smith, Jones, 45000, 2, Shipping 
6666, U, Jones 
8900, A, Hill, Bill, 65000, 0, Accounting 

當我嘗試讀取線使用文件行「」令牌,該方案炸彈帶出第一條記錄處出現NoSuchElementException錯誤。我推斷出我正在閱讀文件的條件導致了這個問題,特別是在下面的while循環中。我試過使用「if」語句並將條件設置爲「while(st2.hasMoreTokens)」和兩者的組合,但錯誤仍然存​​在,我不確定爲什麼?提前感謝您的幫助。這是代碼如下:

Scanner transactionFile = new Scanner (new File(fileName2)); 

     for (int i = 0; i < T_SIZE; i++) { 
      line2[i] = transactionFile.nextLine(); 

      transaction[i] = new Transaction(); 

      st2 = new StringTokenizer(line2[i], ", "); 

      transaction[i].setEmployeeID(Integer.parseInt(st2.nextToken())); 
      transaction[i].setAction(st2.nextToken()); 

      while ((transaction[i].getAction() != "D")) { 
       transaction[i].setLastName(st2.nextToken()); 
       transaction[i].setFirstName(st2.nextToken()); 
       transaction[i].setSalary(Integer.parseInt(st2.nextToken())); 
       transaction[i].setNumOfDependants(Integer.parseInt(st2.nextToken())); 
       transaction[i].setDepartment(st2.nextToken()); 
      } 
     } 
+0

可能的重複[如何比較Java中的字符串?](http:// stackoverflow .com/questions/513832/how-do-i-compare-strings-in-java) –

+0

@SotiriosDelimanolis:不是su重新如何這是一個字符串比較問題?正如我之前解釋過的,我已經使用了其他幾個條件(即「while(st2.hasMoreTokens)」或「while((st2.nextToken)!= null)」,所有結果都是相同的 – user3315213

+1

@ user3315213這個比較(transaction [ i] .getAction()!=「D」)將可能總是返回true,我認爲這就是Sotirios的意思,你應該將Strings與equals相比較 – xp500

回答

1

看看你的while循環。 Java中的==運算符檢查兩個對象是否爲相同的引用,這很少是依賴的好主意,並且可能導致此循環無限循環(或至少在程序崩潰時發生異常)。什麼你想要做的,從邏輯上講,是檢查兩個字符串等於,即,既包含字符串"D"

while (!transaction[i].getAction().equals("D")) 
0
str.nextToken() 

功能訪問的元素,當它被調用,並增加指數它所以你更多地調用它在數組中的元素,所以它不能訪問更高的索引,並引發noSuchElementFound的異常