ArrayList из проблемы txt файла - PullRequest
1 голос
/ 31 января 2012

4 Классы:

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

Ответы [ 3 ]

2 голосов
/ 31 января 2012

Я думаю, что ваша проблема в том, что вы просматриваете все входные данные в следующих строках:

           while (scanner.hasNext())
                    System.out.println(scanner.nextLine());

Также ваши занятия кажутся необычными.Зачем использовать static Object?
Просто создайте обычные классы для каждого из типов, например:

private class Creature{
   // data fields

   public Creature(int index, String type, String name, int partyC, int empathyC, double carryingCapacityC){
      // set data field values
   }

   // accessors, mutators etc.
}

Примерно так: http://goo.gl/hM2Fo

1 голос
/ 31 января 2012

Мой совет, постарайтесь использовать режим отладки.

PS. Основная проблема в том, что вы пытаетесь создать объект из ничего.

0 голосов
/ 31 января 2012

Если я не читаю это неправильно, все ваши объекты возвращают нуль. Затем вы пытаетесь добавить нулевую ссылку в arrayList, а он игнорирует ее. Попробуйте на самом деле создавать объекты и увидеть результаты.

из Коллекции javadoc на add ()

Collections that support this operation may place limitations on what elements may be 
added to this collection. In particular, some collections will refuse to add null
elements, and others will impose restrictions on the type of elements that may be added.
Collection classes should clearly specify in their documentation any restrictions on what  
elements may be added.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...