Filling an array from file input

I am working on a Pokemon fighting simulator (mainly pokemonshowdown gen1), trying to automate the creation of a pokemon array, but running into a scanner problem. The file is formatted as: Name.Type1.Type2.hp.attack.defense.special.speed.list of trained movements. So: Aerodactyl.Flying.Rock.80.105.65.60.130.Agility, Bide, Tiny, Double-Edge, Double Team, Dragon Rage, Fire Blast, Fly, Hyper Beam, Mutants, Rage, Razor Wind, Reflect, Relax, Attack Sky, Replace, Supersonic, Fast, Decrease, Toxic, Wing Attack.

I have a method that works for both myArray and moveArray, but for some reason, using basically the same loop, the scanner returns empty tokens instead of what is in the file.

An exception:

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)

Here is the whole method, it throws an error when calling parseInt for hp.

    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;
}

DISCLAIMER: this is a project for my java 2 course, as well as my first post here, so I don’t know exactly what I should do, just letting it know here.

+4
source share
1 answer

The useDelimiter () method takes the passed String value as the regex value. https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html#useDelimiter-java.lang.String- . A period has a certain meaning in regular expression. To get the specific character "." use this.

Scanner inputScan = new Scanner(new File("src/pokemon")).useDelimiter("\\.");
+2
source

Source: https://habr.com/ru/post/1660726/


All Articles