2009-07-02 60 views
4

我想從鍵盤中的Java 6獲取文本輸入我是新來的語言,每當我運行下面的代碼,我得到這個錯誤:使用Scanner.next()來獲取文本輸入

package test1; 
import java.util.Scanner; 
public class Test { 
public static void main(String[] args) { 
    boolean quit = false; 
    while (!quit){ 
     Scanner keyIn; 
     String c = "x"; 
     while (c != "y" && c != "n") { 
      keyIn = new Scanner(System.in); 
      c = keyIn.next(); 
      keyIn.close(); 
     } 
     if (c == "n") 
      quit = true; 
    } 
} 
} 


Exception in thread "main" java.util.NoSuchElementException 
at java.util.Scanner.throwFor(Scanner.java:838) 
at java.util.Scanner.next(Scanner.java:1347) 
at test1.Test.main(Test.java:11) 

我誤用next()方法嗎?我認爲它會等待用戶輸入,但它看起來不是這樣,並拋出異常,說明掃描儀中沒有任何東西。

+1

什麼是您的代碼正在做什麼,輸入是什麼? – Victor 2009-07-02 00:30:06

+0

所有這些都是試圖讓用戶輸入「y」或「n」,如果它的「y」保持循環,否則退出。無論我按哪個字母,都會發生錯誤。 – wakingrufus 2009-07-02 00:31:38

回答

8

的原因除了是你在使用掃描儀一次後調用keyIn.close(),這不僅關閉了Scanner,還關閉了System.in。在下一次迭代中,您創建了一個新的Scanner,因爲System.in現在已關閉,所以它立即爆炸。要解決這個問題,您應該只在創建一個掃描器之前創建一個掃描器,然後再輸入while循環,並且完全跳過close(),因爲您不想關閉System.in

修復後,程序仍然不會工作,因爲你做的==!=字符串比較。在Java中比較字符串時,您必須使用equals()來比較字符串內容。當您使用==!=時,您正在比較對象引用,因此這些比較將始終在您的代碼中返回false。 Always use equals() to compare strings.

while (!quit){ 
    Scanner keyIn = new Scanner(System.in); 
    String c = "x"; 
    while (!c.equals("y") && !c.equals("n")) { 
     c = keyIn.next(); 
    } 
    if (c.equals("n")) 
     quit = true; 
} 
0

嘗試使用nextLine()並僅查看返回的字符串中的第一個元素。

!=和==只適用於針對字符或其他基本類型,只能在c#中工作。您將需要使用.equals來確保您正在檢查適當的平等。

1
  • 在您的循環外部聲明您的掃描儀參考。您不必每次都創建並關閉它。

  • 將字符串文本與方法equals進行比較,而不是運算符==

2

評價字符串必須使用.equals

而(!c.equals( 「Y」)){做的東西......