helloThere555 Ответов: 1

Как установить значения для типа из текстового файла


Привет, так что в основном у меня возникли некоторые проблемы с инициализацией некоторых значений из текстового файла:


4 4 1
Воин: 2
0 0 1 воздух 1 30.5 30 72 2 e
1 1 2 Пламя 1 85.5 30 72 2 e
Оружие: 2
0 0 3
0 1 30



Я в порядке с битвой воина, однако секция оружия-это то, где я борюсь. По сути, я хочу прочитать значения 0 0 3 и 0 1 30 как различные атрибуты для двух объектов оружия, которые я должен создать.

Например:

weapon1 бы строка 0, коль от 0 и сила 3. Между тем оружие 2 бы строка 0, столбец 1 и сила 30.

Что я уже пробовал:

До сих пор я превратил текстовый файл в список массивов, каждый элемент которого представляет собой строку.

 for (int i = 0; i < list.size(); i++) {

                if (list.get(i).contains("Stone")) {

                    /*Here we are making an attributes array for each line. This is so
                    for each line we can easily parse the attributes and set them through the methods
                            below.*/

                    StoneWarrior_23722002 s = new StoneWarrior_23722002();
                    final String[] attributes = list.get(i).split(" ");
                    boardArray[Integer.parseInt(attributes[0])][Integer.parseInt(attributes[1])] = s;
                    s.setChar('S');
                    setWarriorAttributes(s, attributes);
                    warriorList.add(s);
                    pieceList.add(s);


                } else if (list.get(i).contains("Air")) {

                    AirWarrior_23722002 a = new AirWarrior_23722002();
                    final String[] attributes = list.get(i).split(" ");
                    boardArray[Integer.parseInt(attributes[0])][Integer.parseInt(attributes[1])] = a;
                    a.setChar('A');
                    setWarriorAttributes(a, attributes);
                    warriorList.add(a);
                    pieceList.add(a);


                } else if (list.get(i).contains("Water") && list.get(i).length() > 8) {

                    WaterWarrior_23722002 w = new WaterWarrior_23722002();
                    final String[] attributes = list.get(i).split(" ");
                    boardArray[Integer.parseInt(attributes[0])][Integer.parseInt(attributes[1])] = w;
                    w.setChar('W');
                    setWarriorAttributes(w, attributes);
                    warriorList.add(w);
                    pieceList.add(w);

                } else if (list.get(i).contains("Flame")) {

                    FlameWarrior_23722002 f = new FlameWarrior_23722002();
                    final String[] attributes = list.get(i).split(" ");
                    boardArray[Integer.parseInt(attributes[0])][Integer.parseInt(attributes[1])] = f;
                    f.setChar('F');
                    setWarriorAttributes(f, attributes);
                    warriorList.add(f);
                    pieceList.add(f);
                }

                /*else if (list.get(i).contains("Magic")){

                    while (!(list.get(i).contains("Water") || !(list.get(i).contains("Weapon")))){

                        MagicCrystal_23722002 mc = new MagicCrystal_23722002();
                        final String[] attributes = list.get(i++).split(" ");

                        boardArray[Integer.parseInt(attributes[0])][Integer.parseInt(attributes[1])] = mc;
                        mc.setChar('c');
                        pieceList.add(mc);

                        magicCrystalCount++;


                    }



                }*/

                else if (list.get(i).contains("Weapon")){

                    final String[] atttributes1 = list.get(i).split(":");
                    int cap = Integer.parseInt(atttributes1[1]);

                    for (int j = i; j < cap; j++){

                        final String[] attributes2 = list.get(i).split(" ");
                        Weapon_23722002 weap = new Weapon_23722002();
                        boardArray[Integer.parseInt(attributes2[0])][Integer.parseInt(attributes2[1])] = weap;
                        weap.setWeaponOffPower(Double.parseDouble(attributes2[2]));
                        weap.setChar('x');
                        pieceList.add(weap);
                        weaponList.add(weap);
                    }

                }



}




Итак, как вы можете видеть, я перебираю список массивов и устанавливаю соответствующие атрибуты. Как я могу попасть в раздел оружия, а затем установить его атрибуты?

1 Ответов

Рейтинг:
2

Richard MacCutchan

for (int j = i; j < cap; j++){

Вы начинаете свой счетчик атрибутов оружия с того, что находится в переменной i Однако для правильного подсчета атрибутов следует начинать с нуля .

Моя ошибка, Я думаю, так и должно быть:
for (int j = 0; j < cap; j++){

    final String[] attributes2 = list.get(i).split(" ");
    Weapon_23722002 weap = new Weapon_23722002();
    Weapon_23722002 weap = new Weapon_23722002();
    boardArray[Integer.parseInt(attributes2[0])][Integer.parseInt(attributes2[1])] = weap;
    weap.setWeaponOffPower(Double.parseDouble(attributes2[2]));
    weap.setChar('x');
    pieceList.add(weap);
    weaponList.add(weap);
    i++; // increment i to next weapon
}


helloThere555

Я ценю обратную связь человека, но я изменил ее, и ничего не изменилось :(

Richard MacCutchan

Смотрите мое обновленное решение.