JAVA:扫描程序不读取下一行//返回空字符串

时间:2016-01-20 07:48:15

标签: java java.util.scanner

所以我正在编写Snake,我有一个方法从控制台读取一个整数值 当我的方法抛出一个错误 - 或者至少当我回到那个方法时 - 它不会从输入中读取新行,而只是传递一个空字符串 这是我的代码:

AudioTrack

我在程序开始时将“sc”声明为静态类变量static int readInInt() { //We Read in the next line the user enters String s = sc.nextLine(); //x returns -1 if mistake happens int x = -1; try { //Now we try to parse that int x = Integer.parseInt(s); x = Math.abs(x); System.out.println("Setting the speed to " + (x*100) + "ms."); } catch(NumberFormatException ex) { //If we can't parse it we try to get the ints with a regex and then parse it System.out.println("Du hast eine nummer eingetippt die das System nicht analysieren kann."); System.out.println("Das System probiert jetzt die Nummer die du eingetippt hast über umwege zu Analysieren."); s = s.replaceAll("[^-?0-9]+", ""); try { x = Integer.parseInt(s); } catch(Exception e) { //and if that doesnt work we just say Error! System.out.println("Error Handling didn't work.\n" + "Please try again with just a simple number (e.g. 7)"); //Return an Error in form of -1 return -1; } x = Math.abs(x); System.out.println("Setting the speed to " + (x*100) + "ms."); } return x; }

为什么扫描仪会返回一个空字符串? - 无需用户输入 -
是的,我知道方法.readNextInt,但我觉得处理这样的异常更容易。

5 个答案:

答案 0 :(得分:0)

感谢@Seelenvirtuose带我走上解决方案的正确轨道!

  

我说过,如果在另一个地方使用sc.nextInt(),你就会有一个未被消费的待定换行符。下一个sc.nextLine()仅使用此换行符,并且不会优先输入任何内容。因此,问题在于代码的另一部分! -

解决方案是,在我的代码的某些部分,我使用sc.next()只读取下一个字符串,直到空格(如果我没有记错)而不是sc.nextLine()。 所以我已将所有sc.next()更改为sc.nextLine(),但它没有正常工作。

我在跟踪和错误时找到了其他2个解决方案:
a)Wrtie sc.reset()执行“重置扫描程序会丢弃所有显式状态信息[...] ”bevor访问sc.nextLine()命令或
b)只需创建 Scanner 类的新instanz。

再次感谢Seelenvirtuose

答案 1 :(得分:0)

我用两种不同的扫描仪解决了:一种用于读取int和float值,另一种用于读取String。

Scanner scanString = new Scanner(System.in);
Scanner scanIntFloat = new Scanner(System.in);

int cod = scanIntFloat.nextInt();
String name = scanString.nextLine();

伊莱亚斯。

答案 2 :(得分:0)

您可以使用两个不同的扫描仪 .......

用于读取 int 浮动 double 的第一台扫描仪。

第二个扫描器,用于读取字符串值。

像下面一样……

Scanner scanIntFloat = new Scanner(System.in);
Scanner scanString = new Scanner(System.in);

int cod = scanIntFloat.nextInt();
String name = scanString.nextLine();

答案 3 :(得分:0)

有类似的问题。 我所做的是添加了nextLine(); next()之后的命令;命令来捕获填满您放置输入请求的缓冲区的字符。

基本上:

  • word = scan.next(); -输入您需要的任何文字
  • 捕手= scan.nextLine(); -捕获填充缓冲区的字符
  • input2 = scan.nextLine(); -输入您的下一行

希望这会有所帮助:)

答案 4 :(得分:0)

这是扫描仪的错误。读取非字符串值后,在 Scanner 对象上调用 nextLine(),然后使用 nextLine()

读取您打算读取的实际行