IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Нужна помощь.Ява. (https://www.imho.ws/showthread.php?t=37461)

Oracul 25.08.2003 20:41

Нужна помощь.Ява.
 
Здрастуйте.
Вот есть файл,текстовый,там много слов,в столбик,мне надо написать программку ,которая читает строки из этого файла и записывает в другой,но в первом файле есть повторения,а мне они не нужны,как это реализовать????я вроде написал программку,но она не правильно работает,пишет такой же файл как и первый.Вот код
import java.io.*;

class Slovar {
public static void main(String args[]) throws Exception {
FileWriter fw = new FileWriter("slovarik-final.txt");
FileReader fr = new FileReader("C:/JBuilder8/samples/Welcome/slovar.txt");
BufferedReader br = new BufferedReader(fr);
FileReader fr2 = new FileReader("C:/JBuilder8/samples/Welcome/slovarik-final.txt");
BufferedReader br2 = new BufferedReader(fr2);
String str = br.readLine();
String str2;
int i=0;
while((str=br.readLine())!=null) {
do {
str2=br2.readLine();
if(str.equals(str2)) {
i=1;
}
}
while((br2.readLine())!=null);

if(i==0);
fw.write(str+'\n');
}
fw.close();
}
}

Madness 25.08.2003 21:05

Несколько мыслей:
1) Сортируешь первый файл и при сохранении во второй сравниваешь соседние слова и не сохраняешь одинаковые (долго). (Возможно есть сортировки, предусматривающе исключение повторов)
2) Создаешь числовой массив. Берешь первое слово, нумеруешь его как 1, сравниваешь с другими, одинаковые - тоже 1, второе - с третьим и далее. Потом пробегаешь по массиву и выбираешь строки с последовательными номерами. (нужен массив, но побыстрее)
---
Пока больше ничего на ум не пришло.

Oracul 25.08.2003 21:29

Сортировка невозможна,4 миллиона слов сортировать памяти не хватит,я пробовал.Насчет массива надо попробовать.

Madness 25.08.2003 21:37

4 миллиона DWORDов ~ 15 Mb.

3) Берешь первое слово, пробегаешь с ним по всему списку, удаляя дубли. Далее второе и т.д.

Oracul 25.08.2003 23:10

не 4 миллиона это 50 мегов,а вот как удалять дубли???я не знаю этого метода(функции)

aleh 26.08.2003 09:56

Цитата:

Первоначальное сообщение от Oracul
не 4 миллиона это 50 мегов,а вот как удалять дубли???я не знаю этого метода(функции)
4 миллиона означает только одно -- слишком много повторений! Т.е. одно и тоже слово повторяется несколько раз (2-10, а то и 100 :))

java.util.* -- Есть богатый набор классов для работы с коллекциями. Среди них есть классы поддерживающие хэш и деревья. Кроме того имеются даже классы с сохранением порядка добавления элементов.

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

В зависимости от выбранного класса будет различатся скорость добавления элемента и сканирования коллекции. Дерево выглядит наиболее подходящим + получишь отсортированный словарь.

Oracul 26.08.2003 15:50

aleh
Спасибо за помощь,вот только одно,у меня JBuilder выдает ошибку java.lang.outofmemory .что делать???Рам у меня 256 мегов.Виндовс 98 СЕ.

aleh 26.08.2003 18:23

Oracul
1) Увеличь swap (не более 200-300 Мб)
2) Выкинь из памяти всякую муть.
3) Зарежь память самому JBuilder-у (это сложный вопрос, нужно в его личном JSDK добавить параметр -Xm128, кажется)
4) Запускай программу при выгруженном JBuilder (но это только для большх проектов. Хотя запуск твоей проги приведёт к лишним 16-32 Мб -- отдельный экземпляр java + куча вспомогательных классов и твоя программа)
5) Смени JBuilder на что попроще.

P.S.
Трудно поставить диагноз заочно...

Oracul 27.08.2003 12:29

aleh
IntelliJ IDEA пойдет??

aleh 27.08.2003 13:36

Oracul
Более чем. Это достаточно лёгкий пакет, а главное очень красивый и в нём есть куча полезных опций -- встроенный versioning, refactoring и проверка на явные ошибки.

Я мучал Intellij IDEA 3.0.4 -- :yees:

Oracul 29.08.2003 12:31

Большое спасибо за помощь.aleh а в 98 виндовсе на каждую прогу случайно не выделяеться определенное кол-во памяти и времени процессора?

aleh 29.08.2003 17:31

Oracul
Да незачто.
В 98-х время делится между процессами примерно в равной мере (если они не хотят делиться). А память выделяется сколько надо пока она есть. Под памятью понимается вся RAM (кроме ядра) и виртуальная (swap). Отличие от NT в том, что в 98 память задачи не защищена от других задач (если что-то начинает выпендриваться, то с лёгкостью завалит всю машину).

Java при запуске любит создавать отдельный экземпляр для каждой своей программы. При этом загружаются базовые и вспомогательные классы (где-то 8-32 Мб в зависимости от использования пакетов и java-программы). Поэтому три параллельно запущенных java-приложения обычно запускаются в своей java-песочнице (контейнере).
Таким образом съедается драгоценная память (это вам не Perl). Можно запускать всё в одном экземпляре JRE, но тогда снижается надёжность (что-то типа аналога различия NT и 98).
В случае средств разработки IDE (JBuilder) и приложение мало того что запускаются в различных JRE, так эти JRE могут иметь разные версии (и даже располагаться на различных компьютерах).
Такие пакеты как Oracle 9 для надёжности запускают экземпляр JRE (когда нужно) на каждого пользователя -- память при этом кончается очень быстро.

P.S.
Для нормальной разработки приложений нужно *** Мб RAM:
простое -- 256 Мб
J2EE без бызы данных (IDE + разрабатываемая программа) -- 512 Мб
J2EE (AppServer) + DB (Oracle 9) + IDE (всё запускается на одном PC) -- 768/1024 Мб

Вот откуда взялось выражение "Жava давит" :smile: . Цифры вполне реальные. Как-то пробовал написать простой пример для J2EE SDK на 128 Мб -- ждал по 5-10 минут только чтобы прошёл Deploy (После этого купил себе домой PC c 512 RAM на борту).

"Java очень любит RAM. Отчего и почему сам я толком не пойму." :)

Oracul 31.08.2003 13:12

Я еще новичок,и только только изучил Яву,и поэтому немного знаю.Не мог бы ты обьяснить,чем отличаеться ЕЕ от SE ,всмысле,что есть в ЕЕ чего нету в SE и что такое база данных,что в ней содержиться,и зачем нужно с ней работать?на примере Oracle 9

aleh 01.09.2003 10:27

Oracul
Эх... В мире Java существует 3-ри направления ME, SE и EE -- соответственно Micro, Standard и Enterprise Edition.
Стандартная редакия скорее является маин-стреам. Микро редакция это для маленьких устройств (мобильник, стиральная машина...) а EE вариант просто сверх навороченная добавка поверх SE (в последнее время становиться всё толще и толще).

Обычно SE связывают с клиентскими приложениями (Swing, Applet...) а EE с такими *страшными* словами как Application Server, JSP, EJB (BMP, CMP)...
http://ru.sun.com/win/java/

База данных. Есть данные, их нужно где-то хранить. Мало того что их надо где-то хранить, так с ними нужно ещё и работать -- выборка, поиск, обновление... Вот для этого и существуют базы дынных (DataBase - DB, RDBMS).

Кстати, если нужна DB, то не обезательно сразу начинать с Oracle -- это база данных для профессионального использования (хотя скорее уровня предприятия). Не так давно произошло слияние SAP DB и MySQL -- версии к 5-ой MySQL превратится во вполне серёзную базу данных (но будет куда легче Oracle). Ещё существует PointBase (www.pointbase.com) -- DB 100% на Java. В самом скромном случае можно использовать тот-же Access или даже Excel (через JDBC-ODBC порт).

P.S.
SE + Tomcat (JSP) = лёгкий вариант для EE приложений. Совсем НЕ обязательно использовать самые последние и модные слова. ПО должно отвечать своему назначению а не веяниям моды и амбициям разработчика/менеджера.

Oracul 01.09.2003 13:12

Цитата:

База данных. Есть данные, их нужно где-то хранить. Мало того что их надо где-то хранить, так с ними нужно ещё и работать -- выборка, поиск, обновление... Вот для этого и существуют базы дынных (DataBase - DB, RDBMS).
aleh
Это то я все понимаю,у меня вопрос в другом,что представляют из себя базы данных???

aleh 01.09.2003 15:06

Oracul
Есть два основных варианта (есть ещё, но это либо старо либо специфично):

* Реляционные (RDBMS) -- куча таблиц с записями (фиксированный набор полей)
* Объектные -- в чистом виде мало, иногда применяется как надстройка над реляционными (JDO)

Основная масса приложений использует RDBMS (MySQL, Oracle, SAP DB, MS SQL Server, Access, PointBase...)

Проще изучи SQL-92 и тебе станет понятно что есть база данных. Или сформулируй вопрос по другому, более конкретно (лучше создать или найди соответствующий топик** ).

Oracul 01.09.2003 22:29

Ок,спасибо,изучу,я тут задался целью изучиться все что связано с Явой:biggrin:


Часовой пояс GMT +4, время: 11:37.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.