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 и "смотреть на" соответствующий класс, чтобы посмотреть, что сканировать (вместо того, чтобы делать все это в цикле)? Например: если первая буква - «р», перейдите в класс группы, чтобы узнать, что делать со строкой.