2014-02-26 38 views
-1

所以,我一直有這個問題。我試圖讓這個方法返回給它的字符串的第一個字符,但我不斷得到java.util.NoSuchElementException ...我想我可能會使用一些錯誤的語法,但我真的不知道。任何幫助?此方法不起作用...是語法錯誤嗎?

public static char nthChar(){ 
Scanner sc = new Scanner(in); 
String input = sc.nextLine(); 
char [] userCharArray = new char[input.length()]; 
userCharArray = input.toCharArray(); 
sc.close(); 
return userCharArray[0]; 
} 

注意,我進口java.lang.System中 的靜態成員我改成了這個......

public static char nthChar(){ 
Scanner sc = new Scanner(System.in); 
String input = sc.nextLine(); 
char [] userCharArray = input.toCharArray(); 
sc.close(); 
return userCharArray[0]; 
} 

還不行。

+0

哪裏是在這種靜態方法'in'? – ChiefTwoPencils

+0

userCharArray必須爲空 – markg

+0

您爲'userCharArray'指定一個'new char []',並在您將其重新影響到input.toCharArray()的結果後立即爲什麼? – fge

回答

6

這個貌似犯罪嫌疑人對我說:

sc.close(); 

當您關閉掃描儀,你也關閉System.in。從System.in中讀取新Scanner讀取的後續讀取將拋出NoSuchElementException,因爲基礎流已關閉。

所以你需要刪除它,並通過你的代碼來查看並確保你沒有關閉其他地方的System.in。雖然通常你應該關閉你的流,但是當你完成它們時,System.in是一個特例,你不需要(也不應該)關閉正在讀取它的流。

例如,這將引發一個NoSuchElementException:

Scanner in1 = new Scanner(System.in); 
in1.close(); 
Scanner in2 = new Scanner(System.in); 
String line = in2.nextLine(); // throws the exception 
+2

Upvoted,因爲它是正確的。使用我的小測試程序進行測試,這是我答案的一部分,但多次調用'nchar()'。 – Rainbolt

+0

事情是,在標準輸入關閉之前讀取行......它實際上是拋出異常的'.nextLine()'。 – fge

+0

工作。謝謝。 – user3353751