Я работаю над симулятором боевых действий покемонов (в основном pokemonshowdown gen1), пытаясь автоматизировать создание массива pokemon, но столкнувшись с проблемой сканера. Файл отформатирован как: Name.Type1.Type2.hp.attack.defense.special.speed.list обучаемых движений. Итак: Aerodactyl.Flying.Rock.80.105.65.60.130.Agility, Bide, Bite, Double-Edge, Double Team, Dragon Rage, Fire Blast, Fly, Hyper Beam, Mimic, Rage, Razor Wind, Reflect, Rest, Sky Attack, Substitute, Supersonic, Swift, Take Down, Toxic, Wing Attack.Populating Array from File file
У меня есть метод, работающий как для myArray, так и для moveArray, но по какой-то причине, используя в основном тот же цикл, сканер возвращает пустые токены вместо того, что находится в файле.
Исключение:
0 Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:592)
at java.lang.Integer.parseInt(Integer.java:615)
at Controller.initPokemonArray(Controller.java:169)
at Controller.<init>(Controller.java:29)
at Driver.main(Driver.java:15)
Вот весь метод, он бросает ошибку на ParseInt вызова для л.с.
private Pokemon[] initPokemonArray() {
Pokemon[] pokemonArray = new Pokemon[83];
try {
Scanner inputScan = new Scanner(new File("src/pokemon")).useDelimiter(".");
String name = "";
Type type1 = typeArray[0];
String inputType1 = "";
Type type2 = typeArray[0];
String inputType2 = "";
int hp = 0;
int atk = 0;
int def = 0;
int spc = 0;
int spe = 0;
String[] lm = {};
Move[] learnableMoves;
int counter = 0;
while (counter < 83) {
System.out.print(counter);
if (inputScan.hasNextLine()) {
name = inputScan.next();
System.out.println(name+" ");
//System.out.print("name");
inputType1 = inputScan.next();
for (int i = 0;i < 16;i++)
if (inputType1.equals(typeArray[i].toString()))
type1 = typeArray[i];
System.out.println(type1.toString()+" ");
inputType2 = inputScan.next();
for (int i = 0;i < 16;i++)
if (inputType2.equals(typeArray[i].toString()))
type2 = typeArray[i];
System.out.println(type2.toString()+" ");
hp = Integer.parseInt(inputScan.next());
System.out.println(hp+" ");
atk = Integer.parseInt(inputScan.next());
System.out.println(atk+" ");
def = Integer.parseInt(inputScan.next());
System.out.println(def+" ");
spc = Integer.parseInt(inputScan.next());
System.out.println(spc+" ");
spe = Integer.parseInt(inputScan.next());
System.out.println(spe+" ");
lm = inputScan.next().split(",");
System.out.println();
}
//TODO move this to private helper method
learnableMoves = new Move[lm.length];
for (int i = 0;i < 160;i++) {
for (int j = 0;j < lm.length;j++) {
if (lm[j] == moveArray[i].getName())
learnableMoves[j] = moveArray[i];
}
}
pokemonArray[counter] = new Pokemon(name,type1,type2,hp,atk,def,spc,spe,learnableMoves);
counter++;
}
inputScan.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return pokemonArray;
}
ОТКАЗ: это проект для моего курса Java 2, а также мой первый пост здесь, так что я не знаю точно, что я должен сделать это просто позволить этому быть известным здесь.
Какая ошибка это бросание? – DejaVuSansMono
«Ошибка при вызове parseInt для hp» - какая ошибка? Это происходит для каждой линии или в частности в частности? Было бы полезно, если бы вы включили часть 'src/pokemon', которая вызывает проблему. – bradimus
Пока у вас есть конкретный вопрос и вы не просто ищете кого-то другого, чтобы писать, если для вас вы в порядке. Сначала попробуйте сохранить inputScan.next() в переменную String и распечатать ее. Вы можете поднять пространство или что-то в этом роде. Также загляните в inputScan.nextInt(). – Joe