Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用扫描仪读取文件时出错_Java_File_Java.util.scanner - Fatal编程技术网

Java 使用扫描仪读取文件时出错

Java 使用扫描仪读取文件时出错,java,file,java.util.scanner,Java,File,Java.util.scanner,我正试图用扫描仪读取一个文件并获取一些变量。以下是该文件的外观(忽略中间的额外一行): 控制类型:1 541.0、387.0时发生火灾 火在252.0198.0度 522.0、174.0时的裤子 268.0399.0的裤子 英雄@397.0287.0 我需要做的是获取控件类型并存储它,获取对象类型(fire等),然后获取作为float的坐标。到目前为止,我认为这只是一个开始,但我不确定我是否理解弹出的错误。我想这可能和浮点数之间的逗号有关吧?这是我的代码:(扫描器正在读取包含文件所有内容的字符串

我正试图用扫描仪读取一个文件并获取一些变量。以下是该文件的外观(忽略中间的额外一行):

控制类型:1

541.0、387.0时发生火灾

火在252.0198.0度

522.0、174.0时的裤子

268.0399.0的裤子

英雄@397.0287.0

我需要做的是获取控件类型并存储它,获取对象类型(fire等),然后获取作为float的坐标。到目前为止,我认为这只是一个开始,但我不确定我是否理解弹出的错误。我想这可能和浮点数之间的逗号有关吧?这是我的代码:(扫描器正在读取包含文件所有内容的字符串“level”。不需要新文件等。)

这是输出:

FIRE
然后是这些错误:

Exception in thread "Animation Thread" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextFloat(Unknown Source)
    at Game.loadLevel(Game.java:184)
    at Game.<init>(Game.java:53)
    at Application.setup(Application.java:90)
    at processing.core.PApplet.handleDraw(PApplet.java:2373)
    at processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:1523)
    at processing.core.PSurfaceNone$AnimationThread.run(PSurfaceNone.java:316)
线程“动画线程”java.util.InputMismatchException中的异常 位于java.util.Scanner.throwFor(未知源) 位于java.util.Scanner.next(未知源) 位于java.util.Scanner.nextFloat(未知源) 在Game.loadLevel(Game.java:184) 在游戏中。(Game.java:53) at Application.setup(Application.java:90) 位于processing.core.PApplet.handleDraw(PApplet.java:2373) 在processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:1523) 在processing.core.PSurfaceNone$AnimationThread.run处(PSurfaceNone.java:316)
由于您的输入中有一个
@
,因此会出现错误。您的
nextFloat()
方法获取该值并尝试将其作为浮点进行解析,但失败。因此你看到了例外

一种解决方法是,在.next()中添加另一个
,以使用
@

例如:


编辑

你说你还是有例外。这是因为您的号码由
分隔。你也需要消费它

您可以通过以下方式完成此操作:

if(a.equals("FIRE")){
    in.next();// for @
    String num[] = in.nextLine().split(",");
    float x = Float.parseFloat(num[0].trim());
    float y = Float.parseFloat(num[1].trim());
    fires.add(new Fire(x, y, randGen));
}

@
不是有效的浮点值。通过添加in.next(),仍然获得一个错误来修复此问题。如何在获得浮点值的同时使用它?您需要从扫描仪读取的任何值中删除,字符。将其作为字符串读取,然后手动解析。我曾尝试在x存储后立即打印x,但似乎无法获取。我仍然得到一个错误。似乎调用.nextFloat()会导致错误,即使我在@Using a array工作之后调用它,但我仍然很好奇为什么另一个方法不工作。@dj1121“other method”不工作,因为扫描器获取了包括逗号在内的输入,但正如Tom所指出的,由于存在逗号,所以无法解析它。所以,我把它去掉了。谢谢汤姆指出这一点。
while(in.hasNextLine()){
    String a = in.next();
    System.out.println(a);
    in.next();  //consume the @
    //rest of code
if(a.equals("FIRE")){
    in.next();// for @
    String num[] = in.nextLine().split(",");
    float x = Float.parseFloat(num[0].trim());
    float y = Float.parseFloat(num[1].trim());
    fires.add(new Fire(x, y, randGen));
}