2012-01-31 4 views
1

4 Классов:ArrayList от неприятностей текстового файла

  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) 

Идея ** Является ли это возможно для меня, чтобы иметь, если-нибудь петлю и «смотреть» соответствующего класса, чтобы увидеть, что для сканирования (вместо того, чтобы делать все это в цикле)? Например: если первая буква является «p», перейдите к классу вечеринки, чтобы узнать, что делать с линией.

+3

Пожалуйста, удалите все GUI материал и размещать только код, связанный с разбора ввод. –

+0

И шаги, которые вы использовали до сих пор, чтобы диагностировать проблему? –

+0

Я также рекомендовал бы поместить ваши статические данные в файл XML, потому что он начинает получать подробные и подробные данные. – L7ColWinters

ответ

2

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

  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

+0

На самом деле ... это может быть так. Позвольте мне попробовать изменить это! – tommy1370

+0

Хорошо! теперь я придумываю некоторые ошибки (я опубликую их в своем вопросе) – tommy1370

+0

'System.out.println' - твой друг. Используйте его, чтобы увидеть этапы вашего кода. Например, напечатайте значение 'String line = scanner.nextLine();' просто чтобы узнать, достигает ли код. – rtheunissen

1

Советую по этому вопросу, вы должны попытаться использовать режим отладки.

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

0

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

из Javadoc коллекций на оных()

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. 
Смежные вопросы