2014-10-18 53 views
3

以下Java方法假設通過鍵盤接受用戶的字符串(人的姓名),在名爲name[]的數組中搜索該名稱並從數組中刪除該人的姓名(由分配name[i] = "INVALID")。使用掃描儀讀取輸入時的NoSuchElementException

代碼試圖接受使用Scanner類對象del_name輸入字符串(人的名字),但我在聲明中

s=del_name.next(); 

即從頂部的第4語句得到一個NoSuchElementException

如果有人可以提供解決方案並解釋爲什麼此代碼不起作用,我將非常感激。 (謝謝)

void Deletee() 
{ 


     Scanner del_name=new Scanner(System.in); 

     String s; 

     System.out.println("Enter the name to be deleted"); 

     s=del_name.next(); // causing NoSuchElementException 

     int i=0; 

    /* find position in which the name occurs using while-loop below */ 


     while(!s.equalsIgnoreCase(name[i]) && i<count) 

      i++ ; // increment i to search in next array index 



     if(i<count) 
     { 
      name[i]="INVALID"; 

      count--; 

      System.out.println("Deletion Successful"); 
     } 
     else 
     { 

      System.out.println("No such person exist"); 

     } 

     del_name.close(); 


} 

回答

1

變化.next().nextLine()

Scanner del_name=new Scanner(System.in); 

String s; 

System.out.println("Enter the name to be deleted"); 

s=del_name.nextLine(); 

Scanner.next()返回的任何電流輸入,即使是沒有的(給你的錯誤)。 Scanner.nextLine()跳過當前行並返回跳過的部分。

0

嘗試用,

del_name.nextLine() 

使用next()只會返回一個空間之前會發生什麼。返回當前行後,nextLine()自動移動掃描儀。

next():查找並返回此掃描儀的下一個完整標記。
nextLine():使此掃描儀前進到當前行並返回跳過的輸入。

0

您發佈的代碼不會按原樣拋出異常。您可能在導致此問題的此方法調用之前完成了一些操作。爲了證明這一點,運行此代碼:

public class Test { 

    static String[] name = new String[] {"AAA", "BBB", "CCC"}; 

    static void deletee() { 

     Scanner delName = new Scanner(System.in); 
     System.out.println("Enter the name to be deleted"); 
     String s = delName.next(); 

     boolean found = false; 
     for (int i = 0; i < name.length; i++) { 
      if (name[i].equalsIgnoreCase(s)) { 
       name[i] = "INVALID"; 
       System.out.println("Deletion Successful"); 
       found = true; 
       break; 
      } 
     } 
     if (!found) 
      System.out.println("No such person exist"); 
     delName.close(); 
    } 

    public static void main(String[] args) { 

     deletee(); 
     for (int i = 0; i < name.length; i++) 
      System.out.print(name[i] + ", "); 
    } 
} 

注意

  • 方法名稱應該以小寫字母開頭。
  • 非最終變量不應該使用下劃線,只是大寫字母開頭的新單詞。
  • 我重寫了更直觀的搜索機制,雖然有更多的方法來做到這一點。
  • 關閉掃描儀的工作很好。