2015-04-12 46 views
3

我已經查明瞭這段代碼,但無法弄清楚如何解決它。當運行代碼時,爲什麼不提示用戶輸入,而不是Java確定沒有輸入?下面的錯誤跟蹤。爲什麼此代碼獲取Java NoSuchElement異常?

import java.util.*; 
public class SortAsInserted { 

    public static void main(String[] args) { 
     int array_size = GetArraySize(); 
     //System.out.println(array_size); 
     String[] myArray = new String[array_size]; 
     for (int i = 0; i < array_size; i++){ 
      String next_string = GetNextString(); 
      System.out.println(next_string); 
     } 
    } 



    //public static String[] SortInsert(String nextString){ 
     //} 

    public static int GetArraySize(){ 
     Scanner input = new Scanner(System.in); 
     System.out.print("How many items are you entering?: "); 
     int items_in_array = input.nextInt(); 
     input.close(); 
     return items_in_array; 


    } 

    public static void PrintArray(String[] x) { 
     for (int i = 0; i < x.length; i++){ 
      System.out.print(x[i]); 
     } 

    } 

    public static String GetNextString(){ 
     Scanner input = new Scanner(System.in); 
     System.out.println("Enter the next string: "); 
     String next_string = input.nextLine(); 
     input.close(); 
     return next_string; 

     } 

以下是錯誤 -

How many items are you entering?: 2 
Enter the next string: 
Exception in thread "main" java.util.NoSuchElementException: No line found 
    at java.util.Scanner.nextLine(Unknown Source) 
    at SortAsInserted.GetNextString(SortAsInserted.java:40) 
    at SortAsInserted.main(SortAsInserted.java:10) 
+0

請堅持到Java命名約定,方法應該在'camelCase'中。 –

+0

當您想要繼續從同一個流中讀取時,請勿關閉掃描儀。 – laune

+0

另請參見http://stackoverflow.com/questions/14962082/close-scanner-without-closing-system-in – Bobulous

回答

3

從代碼

+0

這不會幫助過度,因爲OP每次都重新創建'Scanner',它需要被重用。 –

+1

註釋'input.close()'確實解決了這個問題。但最佳實踐表明,應該關閉「Scanner」實例。 – Bobulous

+0

是在主要方法中創建掃描儀並關閉它。 –

0

去除兩個函數的scanner.close()方法將解決您的問題刪除input.close();

import java.util.*; 
public class SortAsInserted { 

    public static void main(String[] args) { 
     int array_size = GetArraySize(); 
     //System.out.println(array_size); 
     String[] myArray = new String[array_size]; 
     for (int i = 0; i < array_size; i++){ 
      String next_string = GetNextString(); 
      System.out.println(next_string); 
     } 
    } 



    //public static String[] SortInsert(String nextString){ 
     //} 

    public static int GetArraySize(){ 
     Scanner input = new Scanner(System.in); 
     System.out.print("How many items are you entering?: "); 
     int items_in_array = input.nextInt(); 
     //input.close(); 
     return items_in_array; 


    } 

    public static void PrintArray(String[] x) { 
     for (int i = 0; i < x.length; i++){ 
      System.out.print(x[i]); 
     } 

    } 

    public static String GetNextString(){ 
     Scanner input = new Scanner(System.in); 
     System.out.println("Enter the next string: "); 
     String next_string = input.nextLine(); 
     // input.close(); 
     return next_string; 

     } 
} 
相關問題