2017-07-23 39 views
1
public class checkDuplicateNames1 { 



public boolean checkDuplicateNames1(String name , String surname){ 
    boolean found = false; 
    File file = new File("transactions.txt"); 

    try { 
     Scanner sc = new Scanner(new File("transactions.txt")); 
     sc.useDelimiter("/"); 


     while(sc.hasNext()){ 

     String userName = sc.next(); 
     String userLastName = sc.next(); 
     String userCash = sc.next(); 
     String paidStatus = sc.next(); 

     if((userName.equals(name)&&userLastName.equals(surname))){ 

      found = true; 

     } 
     else 
     { 

      found = false; 
     } 
     } 

    } catch (FileNotFoundException ex) { 
     Logger.getLogger(checkDuplicateNames.class.getName()).log(Level.SEVERE, null, ex); 
    } 






return found; 



} 

} 

當我在點時,我使用「布爾checkDuplicateNames1」方法,我得到這個錯誤錯誤掃描文本文件顯示錯誤「異常線程‘AWT-EventQueue的 - 0’java.util.NoSuchElementException」

Exception in thread "AWT-EventQueue-0" java.util.NoSuchElementException 
at java.util.Scanner.throwFor(Scanner.java:862) 
at java.util.Scanner.next(Scanner.java:1371) 
at Lending.checkDuplicateNames1.checkDuplicateNames1(checkDuplicateNames1.java:41) 
at Lending.Loan.jButton1ActionPerformed(Loan.java:250) 
at Lending.Loan.access$200(Loan.java:24) 
at Lending.Loan$3.actionPerformed(Loan.java:137) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
at java.awt.Component.processMouseEvent(Component.java:6533) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) 
at java.awt.Component.processEvent(Component.java:6298) 
at java.awt.Container.processEvent(Container.java:2236) 
at java.awt.Component.dispatchEventImpl(Component.java:4889) 
at java.awt.Container.dispatchEventImpl(Container.java:2294) 
at java.awt.Component.dispatchEvent(Component.java:4711) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) 
at java.awt.Container.dispatchEventImpl(Container.java:2280) 
at java.awt.Window.dispatchEventImpl(Window.java:2746) 
at java.awt.Component.dispatchEvent(Component.java:4711) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 
at java.awt.EventQueue.access$500(EventQueue.java:97) 
at java.awt.EventQueue$3.run(EventQueue.java:709) 
at java.awt.EventQueue$3.run(EventQueue.java:703) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) 
at java.awt.EventQueue$4.run(EventQueue.java:731) 
at java.awt.EventQueue$4.run(EventQueue.java:729) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 

我試圖用不同的FileReader喜歡的BufferedReader是一樣的,

這裏是一個使用「類貸款」方法「checDuplicateNames1」方法

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           

    // TODO add your handling code here: 


    String name = jTextField1.getText(); 
    String surname = jTextField4.getText(); 
    String cash = jTextField5.getText(); 
    System.out.println("loan clicked"); 

    try { 

     String info = name + "/" + surname + "/" + cash + "/" + "unpaid"; 

     checkDuplicateNames1 c = new checkDuplicateNames1(); 
     boolean duplicated = c.checkDuplicateNames1(name,surname); 

     if(duplicated == true){ 
      System.out.println("duplicated"); 
      this.currentName = name; 
      this.currentSurname = surname; 
      JOptionPane.showMessageDialog(null,"Person already in the Record "); 
      wannaAddLoanValue w = new wannaAddLoanValue(name,surname,cash); 
      w.show(); 



     } 
     else 
     { 
      File file = new File("transactions.txt"); 
      PrintWriter writer = new PrintWriter(new FileWriter(file,true)); 
      String info1 = name + "/" + surname + "/" + cash + "/" + "unpaid"; 
      writer.println(info1); 
       writer.close(); 

     } 



    } catch (FileNotFoundException ex) { 
     Logger.getLogger(Loan.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IOException ex) { 
     Logger.getLogger(Loan.class.getName()).log(Level.SEVERE, null, ex); 
    } 




}         

,並在文件中的文本都是這樣

rodchris/toledo/200/unpaid 
yannie/taub/890/unpaid 

回答

0

其中線在烏爾類是41

while(sc.hasNext()){ 

    // This line is OK 
    String userName = sc.next(); 

    // The following lines can cause NoSuchElementException 
    String userLastName = sc.next(); 
    String userCash = sc.next(); 
    String paidStatus = sc.next(); 

checkDuplicateNames1()可以如下進行重構?即其next()導致錯誤,

我覺得hasNext()認爲當前整個輸入爲1個令牌,但是當你調用next()幾次,你只拿到了第一個1個例外,要解決這個問題,我認爲你必須檢查hasNext()以前每個next()

while(sc.hasNext()){ 
    String userName="",userLastName="",userCash="",paidStatus=""; 

    //first one already checked in while(...) 
    userName = sc.next(); 

    if(sc.hasNext())   
     userLastName = sc.next(); 

    if(sc.hasNext()) 
     userCash = sc.next(); 

    if(sc.hasNext()) 
     paidStatus = sc.next(); 

    //... rest of code 
在你的代碼的其餘部分

,你可能要檢查每一個變量是空

if(!userLastName.isEmpty()) ... 
+0

Omg它的工作,非常感謝你:)))) +1 –

3

sc.next();之前,您應該總是調用sc.hasNext()

public boolean checkDuplicateNames1(String name, String surname) { 
    boolean found = false; 
    try (Scanner sc = new Scanner(new File("transactions.txt"))) { 
     sc.useDelimiter("/"); 
     String userName = sc.hasNext() ? sc.next() : null; 
     String userLastName = sc.hasNext() ? sc.next() : null; 
     return userName != null && userLastName != null && userName.equals(name) && userLastName.equals(surname);    
    } catch (FileNotFoundException ex) { 
     Logger.getLogger(checkDuplicateNames.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    return found; 
} 
+0

打我給它。好的答案,+1。你應該包含問題的解決方案 – CodingNinja

+0

嘗試它,仍然不會工作:(( –

+0

我甚至使用了BufferedReader,但仍然有同樣的錯誤,我也嘗試掃描一行,並使用數組分隔數據與分隔符,還是一樣的。 –

相關問題