Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массив из файла 
:(
    Опции темы
icepro
  Дата 12.11.2009, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 20.11.2006

Репутация: нет
Всего: нет



Нужно считать массив из файла заранее не зная сколько там элементов (тип флоат), есть несколько соображений:
1) в начале файла писать количество элементов
2) два раза проходить по файлу и сначала найти количество потом создать подходящий массив а потом считывать в него

Но может существуют какието более универсальные способы? Может найти размер файла а потом поделить на размер флоата, или еще как?
Заранее спасибо!
PM MAIL   Вверх
math64
Дата 12.11.2009, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Можно считать в ArrayList, затем конвернуть в массив. Но в ArrayList числа будут храниться не в float, а в Float, что потребует больше памяти. Поэтому в ArrayList лучше помещать массивы float[] фиксированной размерности, например по 1024 числа, в последнем будет меньше.
PM   Вверх
icepro
Дата 12.11.2009, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 20.11.2006

Репутация: нет
Всего: нет



Дело в том что у меня есть прога, которая реализует работу с векторами двумя способами: через массив, и через связной список, и вот при чтении я использую связной список что б добалять в конец новые элементы, и подумываю как бы можно реализовать что б не привязываться с списку, может размерность массива можно менять по ходу заполнения?
PM MAIL   Вверх
math64
Дата 13.11.2009, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Размерность массива менять нельзя - можно только создать новый массив и скопировать в него элементы из старого.
При использовании LinkedList можно если для экономии памяти, как я уже предлагал, помещать в него не числа, а массивы
Код

void process(double d) { ... }
void process(object o) {
   if (o instanceof(Float))
     process(((Float)o).doubleValue();
   else if (o instanceof(Double))
     process(((Double)o).doubleValue();
   else if (o instanceof(List))
     for(Object o1:(List)o)
       process(o1);
   else if (o instanceof(double[]))
     for(double o1:(double[])o)
       process(o1);
   else if (o instanceof(float[]))
     for(float o1:(float[])o)
       process(o1);
   else
     ...
}

PS: код не компилил, могут быть ошибки
PM   Вверх
goodday1941
Дата 13.11.2009, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 709
Регистрация: 16.7.2006
Где: Украина, Киев

Репутация: 1
Всего: 9



в данном случае я бы использовал два класса Scanner и LinkedList (думаю это был бы самый оптимальный вариант в плане использования памяти)


--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.