Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 25.03.2018
Сообщений: 7
1

Чтение теста из файлов в Java. java коллекции, потоки. создать приложение, в котором будет два отдельных потока

01.04.2019, 18:37. Показов 2411. Ответов 3

Author24 — интернет-сервис помощи студентам
Создайте два текстовых файла с именами, например,
countries.txt и capitals.txt. В первом файле должны быть
перечислены названия стран, во втором — названия их
столиц в той очередности, в которой в первом файле
перечислены страны. Например:
countries.txt
Austria China Brazil Netherlands Ukraine Canada
capitals.txt
Vienna Beijing Brasilia Amsterdam Kyiv Ottawa
Не поленитесь и занесите в файлы не менее десяти
значений. Разделитель выберите по своему усмотрению,
можете даже заносить каждое значение в отдельной строке.
Теперь вам надо создать приложение, в котором будет
два отдельных потока для чтения каждого из файлов.
Причем потоки должны работать таким образом. Первый
поток читает название первой страны из своего файла
и останавливается, передав второму потоку эстафету
чтения. Второй поток читает название очередной сто-
лицы. Когда прочитано и название страны и название
ее столицы, приложение должно создать объект класса

CountryInfo.

Class CountryInfo
{
private String country;
145

private String capital;
...
}

Созданный объект добавляется в коллекцию. Таким
образом должны быть прочитаны оба файла и создана
коллекция объектов CountryInfo.
После этого коллекция должна быть отсортирована
по полю country и выведена на экран. Затем коллекция
должна быть отсортирована по полю capital и тоже вы-
ведена на экран.
Потоки ввода–вывода, вид коллекции, способы син-
хронизации потоков и способ сортировки выберите са-
мостоятельно. Использование лямбда–выражений и ано-
нимных классов приветствуется.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.04.2019, 18:37
Ответы с готовыми решениями:

Создать Windows приложение на Java в NetBeans (Java Desktop Application)
Здравствуйте. Хочу создать Windows-приложение на Java с помощью NetBeans 7.3. При создании нового...

Как запустить паралельно два потока JAVA?
Помогите, нужно запустить паралельно выполнение 2 действий без задержки.

Создать приложение в котором в левой чисти экрана будет куб который будет вращаться с помощью "перетаскивания мыши"
Дали задание, не знаю как делать, подскажите пожалуйста. Вот текст задания: Создать приложение в...

Запись и чтение файлов в java
записать в двоичный файл 20 случайных чисел. Прочитать записанный файл, распечатать числа. Написал...

3
Автоматизируй это!
Эксперт Python
7107 / 4610 / 1215
Регистрация: 30.03.2015
Сообщений: 13,236
Записей в блоге: 29
01.04.2019, 19:02 2
хорошая задача, дерзай!
0
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
02.04.2019, 03:13 3
Лучший ответ Сообщение было отмечено Женя1987 как решение

Решение

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
import java.io.*;
import java.util.*;
import java.util.List;
 
public class CountryParse {
    private static final int AMOUNT_THREAD = 2;
    private final String[] paths;
    private final List<Thread> poll;
 
    private final Queue<Thread> threadQueue;
    private final Queue<String> queue;
 
    private Set<CountryInfo> tree;
 
    CountryParse(String pathCountry, String pathCapital) {
        checkArguments(pathCountry, pathCapital);
        this.paths = new String[AMOUNT_THREAD];
        this.paths[0] = pathCountry;
        this.paths[1] = pathCapital;
        this.poll = new ArrayList<>();
        this.queue = new PriorityQueue<>();
        this.threadQueue = new PriorityQueue<>();
        this.tree = new TreeSet<>();
    }
 
    private void createPool() {
        for (String path : this.paths) {
            this.poll.add(new Thread(new Reader(this, path)));
        }
    }
 
    private void startPool() {
        for (Thread thread : this.poll) {
            thread.start();
        }
    }
 
    void parse() {
        createPool();
        startPool();
        while (isActive()) {
            synchronized (this.queue) {
                if (this.queue.size() == 2) {
                    String country = this.queue.poll();
                    String capital = this.queue.poll();
                    this.tree.add(new CountryInfo(country, capital));
                    this.queue.notifyAll();
                }
            }
        }
    }
 
    public CountryInfo[] toArray() {
        return this.tree.toArray(new CountryInfo[0]);
    }
 
    public CountryInfo[] toArray(Comparator<CountryInfo> c) {
        return this.tree.stream().sorted(c).toArray(CountryInfo[]::new);
    }
 
    private boolean isActive() {
        boolean result = false;
        for (Thread thread : this.poll) {
            if (thread.isAlive()) {
                result = true;
                break;
            }
        }
        return result;
    }
 
    private void checkArguments(String first, String second) {
        if (first == null || second == null) {
            throw new IllegalArgumentException("Arguments not may be null.");
        }
    }
 
    private void addByQueue(String value) {
        try {
            synchronized (this.threadQueue) {
                if (!this.threadQueue.isEmpty()) {
                    while (this.threadQueue.peek() == Thread.currentThread()) {
                        this.threadQueue.wait();
                    }
                    this.threadQueue.poll();
                }
                this.threadQueue.offer(Thread.currentThread());
                addValue(value);
                this.threadQueue.notify();
            }
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            e.printStackTrace();
        }
    }
 
    private void addValue(String value) throws InterruptedException {
        synchronized (this.queue) {
            while (this.queue.size() >= AMOUNT_THREAD) {
                this.queue.wait();
            }
            this.queue.offer(value);
        }
    }
 
    private class Reader implements Runnable {
        private final CountryParse parse;
        private final String path;
 
        Reader(CountryParse parse, String path) {
            this.parse = parse;
            this.path = path;
        }
 
        @Override
        public void run() {
            try (Scanner read = new Scanner(new File(this.path))) {
                while (read.hasNextLine()) {
                    this.parse.addByQueue(read.nextLine());
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
}
 
class CountryInfo implements Comparable<CountryInfo> {
    private final String country;
    private final String capital;
 
    String getCapital() {
        return capital;
    }
 
    CountryInfo(String country, String capital) {
        this.country = country;
        this.capital = capital;
    }
 
    @Override
    public String toString() {
        return String.format("%s - %s", this.country.toUpperCase(), this.capital);
    }
 
    @Override
    public int compareTo(CountryInfo o) {
        return o != null ? this.country.compareTo(o.country) : 0;
    }
}
 
class CountryParseTest {
    private static final String COUNTRY = "countries.txt";
    private static final String CAPITAL = "capitals.txt";
 
    public static void main(String[] args) {
        CountryParse countryParse = new CountryParse(COUNTRY, CAPITAL);
        countryParse.parse();
 
        System.out.println("Default sort by country:");
        for (CountryInfo countryInfo : countryParse.toArray()) {
            System.out.println("   " + countryInfo);
        }
 
        System.out.println("\nSort by capital:");
        for (CountryInfo countryInfo : countryParse.toArray(Comparator.comparing(CountryInfo::getCapital))) {
            System.out.println("   " + countryInfo);
        }
    }
}
Добавлено через 47 секунд
File [countries.txt]:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
Angola
Sudan
Kazakhstan
Paraguay
Portugal
Syria
Bahamas
Greece
Latvia
Morocco
Iran
Panama
Guatemala
Iraq
Laos
Nepal
Vatican
Seychelles
Ukraine
Africa
Tanzania
Zambia
Britain
Ghana
Bahrain
Congo
Canada
Maldives
Turkey
Belgium
Namibia
Finland
Georgia
Jamaica
Turkmenistan
Peru
Germany
Guinea
Somalia
Madagascar
Thailand
Vietnam
Sweden
Liechtenstein
Poland
Jordan
Nigeria
Bulgaria
Tunisia
Croatia
Uruguay
Kenya
Spain
Lebanon
Azerbaijan
Cuba
Venezuela
Liberia
Israel
Australia
Tajikistan
Estonia
Cameroon
Cyprus
Timor
Oman
Iceland
Armenia
Gabon
Austria
Mozambique
Nevis
Arabia
Monaco
Luxembourg
Brazil
Algeria
Slovenia
Ecuador
Hungary
Japan
Belarus
Verde
Albania
Senegal
Italy
Honduras
Macedonia
Nauru
Afghanistan
Burundi
Singapore
Egypt
Bolivia
Malta
Russia
Netherlands
Pakistan
Gambia
China
Ireland
Qatar
America
Slovakia
Serbia
France
Kyrgyzstan
Korea
Romania
Philippines
Uzbekistan
Nicaragua
Barbados
Norway
Denmark
Zimbabwe
Uganda
Mexico
Grenadines
Indonesia
Добавлено через 1 минуту
File [capitals.txt]:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
Luanda
Khartoum
Astana
Asuncion
Lisbon
Damascus
Nassau
Athens
Riga
Rabat
Tehran
Panama
Guatemala
Baghdad
Vientiane
Katmandu
Vatican
Victoria
Kiev
Pretoria
Dodoma
Lusaka
London
Accra
Manama
Kinshasa
Ottawa
Male
Ankara
Brussels
Windhoek
Helsinki
Tbilisi
Kingston
Ashgabat
Lima
Berlin
Malabo
Mogadishu
Antananarivo
Bangkok
Hanoi
Stockholm
Vaduz
Warsaw
Amman
Abuja
Sofia
Tunis
Zagreb
Montevideo
Nairobi
Madrid
Beirut
Baku
Havana
Caracas
Monrovia
Jerusalem
Canberra
Dushanbe
Tallinn
Yaounde
Nicosia
Dili
Muscat
Reykjavik
Yerevan
Libreville
Vienna
Maputo
Basseterre
Riyadh
Monaco
Luxembourg
Brasilia
Algiers
Ljubljana
Quito
Budapest
Tokyo
Minsk
Praia
Tirana
Dakar
Rome
Tegucigalpa
Skopje
Yaren
Kabul
Bujumbura
Singapore
Cairo
Sucre
Valletta
Moscow
Amsterdam
Islamabad
Banjul
Peking
Dublin
Doha
Washington
Bratislava
Belgrade
Paris
Bishkek
Pyongyang
Bucharest
Manila
Tashkent
Managua
Bridgetown
Oslo
Copenhagen
Harare
Kampala
City
Kingstown
Jakarta
1
0 / 0 / 0
Регистрация: 25.03.2018
Сообщений: 7
03.04.2019, 19:37  [ТС] 4
СПАСИбо!!!!! очень помогли!!!! теперь буду разбираться!!!! спасибо!!!!
0
03.04.2019, 19:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2019, 19:37
Помогаю со студенческими работами здесь

Чтение файлов из базы данных MySQL на Java
Программа не выводит результат запроса по выборке из таблицы определенного значения (здесь: первая...

В java сделать приложение из нескольких общих файлов
сделать одно приложение java из нескольких java файлов для примера есть java файл ex.java он...

Создать приложение в Delphi, в котором по нажатию кнопки у формы будет меняться заголовок через каждые 2 секунды
очень-очень нужна помощь....

Легкое приложение на Java EE. Как создать ?
Ребят, помогите, пожалуйста, кто шарит в Java EE. Мне нужно сделать очень просто веб приложение. Он...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru