2013-12-08 38 views
-1

我的方法運行,但在執行一次後會得到異常。我不明白爲什麼。第24行,在例外中註明的行是「choice = in.nextInt();」
運行此方法時獲取NoSuchElementException

這裏是我的例外:

1查找某一項目。
2顯示所有項目。
3更新項目。
4將項目保存到磁盤。
5退出。
您選擇從文件中找到一個項目。
輸入您想要查找的dvd的sku。
857295 Star.Wars 152
1查找項目。
2顯示所有項目。
3更新項目。
4將項目保存到磁盤。
5退出。在java.util.Scanner.throwFor(未知來源)
異常在線程 「主」 java.util.NoSuchElementException

在java.util.Scanner.next(未知來源)
在java.util.Scanner中。 nextInt(來源不明)
在java.util.Scanner.nextInt(來源不明)
在version4.version4.main(version4.java:24)

這裏是我的代碼:

import java.util.*; 
import java.io.*; 

public class version4 
{ 
public static void main(String[] args) throws FileNotFoundException 
{ 
Scanner in = new Scanner(System.in); 
boolean exit = false; 
int choice = 0; 

while (!exit) 
{ 
    System.out.println("1 Find an item.\n2 Display all items.\n3 Update item.\n4 Save item to disk.\n5 Quit."); 
    choice = in.nextInt(); 
    switch (choice){ 

    case 1: System.out.println("You chose to find an item from file."); findItem(); break; 
    case 2: System.out.println("You chose to display all items."); readDisplay(); break; 
    case 3: System.out.println("You chose to update an item."); itemUpdate(); break; 
    case 4: System.out.println("You chose to save an item to disk."); itemAdd(); break; 
    case 5: exit = true; in.close(); break; 
    default: System.out.println("That is not a valid option."); break; 
} 
} 
System.out.println("Goodbye."); 
} 

public static void findItem() throws FileNotFoundException { 

    FileReader reader = new FileReader("read_record.txt"); 
    Scanner fin = new Scanner(reader); 
    String str = null; 
    ArrayList<String> dvdfile = new ArrayList<String>(); 
    if (fin != null && fin.hasNext()) { // do we have a scanner, is there anything to read? 
     while (fin.hasNext()) { // while there's something to read... 
     str = fin.next(); // read it. 
     if (str == null) { // end if it's null 
      break; 
     } 
     dvdfile.add(str); // otherwise add it. 
     } 
    } fin.close(); 

    Scanner kb = new Scanner(System.in); 
    System.out.println("Enter the sku of the dvd you wish to find."); 
    String dvdSku = kb.next(); 

    int index = dvdfile.indexOf(dvdSku); 

    // Finds the dvd that matches sku entered, and prints out its attributes under correct rows. 
    String skuToFind = dvdfile.get(index); String titleToFind = dvdfile.get(index+1); String lengthToFind = dvdfile.get(index+2); 
    System.out.printf("%-10s %-15s %10s %n",skuToFind,titleToFind,lengthToFind); 
    kb.close(); 
} 

回答

0

即使掃描器不再有下一個元素來提供......拋出異常,它看起來就像在下一次調用。你需要檢查Scanner#hasNext()調用Scanner#next()

之前的代碼將

Scanner in = new Scanner(System.in); 
    boolean exit = false; 
    int choice = 0; 

    while (!exit) 
    { 
     System.out.println("1 Find an item.\n2 Display all items.\n3 Update item.\n4 Save item to disk.\n5 Quit."); 
     while(in.hasNext()){ 
     //next token available 
     if(in.hasNextInt()){ 
     /next token is an int value 
     choice = in.nextInt(); 
     } 
} 
} 

按照文檔

public boolean hasNext() 

返回true,如果此掃描器的輸入中有另一個標記。 此方法可能會阻止在等待輸入以掃描。掃描儀不會超過任何輸入。

+0

仍然得到與此相同的例外。它說行24,這將是在「choice = in.nextInt()」 – Corey

+0

請現在看我的答案 – Keerthivasan

+0

舊的例外已消失。現在我正在獲得一個新的。不知道爲什麼,它說它超出了界限,但是我測試的指數是索引+2是數組列表的最後一個元素,它甚至會打印出3個元素。
異常在線程 「主」 java.lang.ArrayIndexOutOfBoundsException:-1 \t在java.util.ArrayList.elementData(未知來源) \t在java.util.ArrayList.get(未知來源) \t在version4.version4。 findItem(version4.java:69) \t at version4.version4.main(version4.java:31) – Corey