Лучший подход для хранения трех данных - массив multi-d? - PullRequest
0 голосов
/ 05 апреля 2011

Я работаю с файлом, который имеет такой формат:

LAWS303 RHLT1   10  84  AITKEN  WU  
LAWS314 RHLT3   15  2   PARADZA VISSER  
LAWS329 EALT006 6   62  AITKEN  WILSON  
LAWS334 HMLT105 2   43  ANDREW  INKSTER 
LAWS334 HMLT206 2   62  JULIAN  YOUNG   
LAWS340 RHLT1   11  87  AL  YANG    

Цель этой программы - чтобы каждый день (третий столбец) месяца, каждый код курса (первыйстолбец) должен быть напечатан вместе с общим количеством студентов (четвертый столбец), посещающих курс в этот день.По моим размышлениям, это подразумевает либо многократное чтение файла (ew!), Либо загрузку трех значимых значений (день, курс, численность персонала) в какой-то массив и работу с ним вместо этого.Несмотря на то, что он достаточно хорошо знаком с многомерным массивом, он неоднократно заставлял мою голову взрываться.У меня есть псевдокод для этой программы, написанный передо мной, и мой разум рисует пробел, когда дело доходит до строки, определяющей массив.

DayOfMonth может оставаться строкой, поскольку он будет сравниваться только с другой строкой.Код курса, очевидно, тоже должен быть строкой.Однако headCount в идеале должен быть числовым;он будет добавлен по мере обработки каждой строки файла.Связь между этими тремя типами заключается в том, что может быть много courseCodes в dayOfMonth, но только один headCount на courseCode, как я добавлю к нему, когда прочту все в массив.

Итак, в derpspeak,это должно выглядеть примерно так:

{String dayOfMonth = {{String courseCode}, {int headCount}}}

Две проблемы, которые у меня есть, это ... a), чтоЯ не уверен, как на самом деле закодировать этот фанк-массив там и б) поскольку я не могу действительно обернуть его вокруг себя с самого начала, есть очень хороший шанс, что я просто спроектировал что-то совершенно неправильное дляЧто мне нужно.Или невозможно.Оба?

Например, массив будет начинаться с пустого.Я хотел бы добавить dayOfMonth, courseCode и headCount, чтобы начать его.Но я не мог просто пойти array.add (dayOfMonth), потому что он ожидает массив, что наводит меня на мысль, что я должен использовать что-то еще.Argh!

Боже мой мозг.

Ответы [ 2 ]

0 голосов
/ 05 апреля 2011

Если вы хотите сохранить и получить значения, используйте ввод @Stephan C. Вот фрагмент кода для печати значений с использованием sysout. Вы можете изменить значения так, как вам нужно.

BufferedReader reader = new BufferedReader(new FileReader("< your file here >"));
        String string = reader.readLine();
        while (string != null) {
            StringTokenizer tokenizer = new StringTokenizer(string);
            String print = "";

            if (tokenizer.countTokens() > 4) {
                print = tokenizer.nextToken();
                tokenizer.nextToken();
                print = tokenizer.nextToken() + " " + print;
                print = print + " " + tokenizer.nextToken();
            }
            System.out.println(print);
            string = reader.readLine();
        }
0 голосов
/ 05 апреля 2011

Это похоже на домашнюю работу, поэтому мой ответ будет состоять из подсказок.

Подсказка № 1 - в этих строках есть несколько объектов. Подумайте, кто они, и напишите класс для каждого.

Подсказка №2. Используйте типы списков, а не массивы. Массивы должны быть предварительно выделены с правильным количеством элементов.

Подсказка № 3 - Используйте типы карт (например, HashMap или TreeMap) для представления сопоставлений от одного вида вещей к другому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...