【发布时间】:2012-01-31 14:53:13
【问题描述】:
4 类:
-
Party- 一些生物的索引、名称、位置和列表(通过指向 Creature 类实例的链接访问)。 -
Creature- 索引、类型、名称、索引派对、移情值、恐惧值、宝藏清单、文物清单 -
Treasure- 索引、类型、生物按索引、权重、值 -
Artifact- 索引、类型、索引生物、其他字段
使用 ArrayList 类来保存上述类的实例。
测试数据(看起来像):
p : 10003 : Conglomeration
c : 20001 : Woman : Lucy :10001 : 17 : 22 : 20
t : 30004 : Silver : 20005 : 120 : 1000
a : 40001 : Wand : 20007 : ElderWand
这是我到目前为止所写的:
import java.io.IOException;
import java.util.*;
import javax.swing.JFileChooser;
import java.util.Scanner;
public class SorcerersCave {
public static void main(String[] args) {
ArrayList<Party> partyList = new ArrayList<Party>();
ArrayList<Creature> creatureList = new ArrayList<Creature>();
ArrayList<Treasure> treasureList = new ArrayList<Treasure>();
ArrayList<Artifact> artifactList = new ArrayList<Artifact>();
// open and read file:
try {
Scanner scanner = new Scanner(chooser.getSelectedFile())
.useDelimiter("\\s*:\\s*");
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
int index;
String type;
String name;
char identifier = line.charAt(0);
if (identifier == 'p') {
index = scanner.nextInt();
name = scanner.next();
partyList.add(new Party(partyInfo(index, name)));
} else if (identifier == 'c') {
index = scanner.nextInt();
type = scanner.next();
name = scanner.next();
int partyC = scanner.nextInt();
int empathyC = scanner.nextInt();
double carryingCapacityC = scanner.nextDouble();
creatureList.add(new Creature(creatureInfo(index, type,
name, partyC, empathyC, carryingCapacityC)));
} else if (identifier == 't') {
index = scanner.nextInt();
type = scanner.next();
int creatureT = scanner.nextInt();
double weightT = scanner.nextDouble();
int valueT = scanner.nextInt();
treasureList.add(new Treasure(treasureInfo(index, type,
creatureT, weightT, valueT)));
} else if (identifier == 'a') {
index = scanner.nextInt();
type = scanner.next();
int creatureA = scanner.nextInt();
artifactList.add(new Artifact(artifactInfo(index, type,
creatureA)));
} else {
System.out.println("This is not a valid line of input");
}
System.out.println("Identifier: " + identifier);
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("party: " + partyList.toString());
}
}
private class Creature {
public Creature (int index, String type, String name,
int partyC, int empathyC, double carryingCapacityC) {
return;
}
}
private class Party {
public Party(int index, String name) {
return;
}
}
private class Artifact {
public Artifact(int index, String type, int creatureA) {
return;
}
}
private class Treasure {
public Treasure(int index, String type, int creatureT,
double weightT, int valueT) {
return ;
}
}
我知道我已经遇到了问题,因为当我尝试打印 partyList 数组的内容时。它是空的。我就是不明白为什么。
存在的错误:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at SorcerersCave.main(SorcerersCave.java:43)
想法** 我是否有可能拥有 if-else 循环和“查看”相应的类来查看要扫描的内容(而不是在循环中完成所有操作)?例如:如果第一个字母是“p”,就去派对班看看如何处理这条线。
【问题讨论】:
-
请删除所有的 GUI 内容,只发布与解析您的输入相关的代码。
-
到目前为止您用于诊断问题的步骤是什么?
-
我还建议您将静态数据放在 XML 文件中,因为它开始变得有点冗长和详细。
-
我删除了一堆...更好? (对此感到抱歉)
-
我很好奇为什么你要扮演人类调试器的角色,每次有人发现问题时问题都会改变。我知道我们应该互相帮助。但从我的角度来看,OP 不知道如何解决基本问题。他只是复制粘贴一些骨架实现,现在你们都帮他解决它。我可能会担心***中的痛苦。但这违反了我认为的 SO 政策。如有错误请指正。