我试图用扫描仪读取文件并获取一些变量。这是文件的样子(忽略其间的额外线):
ControlType:1
FIRE @ 541.0,387.0
FIRE @ 252.0,198.0
PANT @ 522.0,174.0
PANT @ 268.0,399.0
HERO @ 397.0,287.0
我需要做的是获取控件类型并存储它,获取对象类型(fire等),然后将坐标作为浮点数。到目前为止,我认为这是一个开始,但我不确定我是否理解弹出的错误。我想它可能与花车之间的逗号有关?这是我的代码:(扫描程序正在读取字符串" level"其中包含文件的所有内容。不需要新文件等。)
// Create a scanner
Scanner in = new Scanner(level);
// Move past initial text
in.next();
// Get control type
int controlType = in.nextInt();
// While there is something to read
while (in.hasNextLine()) {
String a = in.next();
System.out.println(a);
if (a.equals("FIRE")) {
in.next();
float x = in.nextFloat();
float y = in.nextFloat();
fires.add(new Fire(x, y, randGen));
} else if (a.equals("HERO")) {
in.next();
float x = in.nextFloat();
float y = in.nextFloat();
hero = new Hero(x, y, controlType);
} else if (a.equals("PANT")) {
in.next();
float x = in.nextFloat();
float y = in.nextFloat();
pants.add(new Pant(x, y, randGen));
}
}
这是输出:
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)
答案 0 :(得分:1)
由于输入中有@
,您会收到错误消息。你的nextFloat()
方法得到了它,并尝试将其解析为浮点数,但失败了。因此,您会看到异常。
要克服的一种方法是,在代码中添加另一个in.next()
,以使用@
。
例如:
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));
}