2009-07-02 34 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”)){做的东西......