МОЙ ВАРИАНТ:
package com.javarush.test.level22.lesson09.task03;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.StringTokenizer;
/* Составить цепочку слов
В методе main считайте с консоли имя файла, который содержит слова, разделенные пробелом.
В методе getLine используя StringBuilder расставить все слова в таком порядке,
чтобы последняя буква данного слова совпадала с первой буквой следующего не учитывая регистр.
Каждое слово должно участвовать 1 раз.
Метод getLine должен возвращать любой вариант.
Слова разделять пробелом.
В файле не обязательно будет много слов.
Пример тела входного файла:
Киев Нью-Йорк Амстердам Вена Мельбурн
Результат:
Амстердам Мельбурн Нью-Йорк Киев Вена
*/
public class Solution {
public static void main(String[] args) throws IOException {
//...
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
BufferedReader lineReader = new BufferedReader(new InputStreamReader
(new FileInputStream(fileName), StandardCharsets.UTF_8));
String line;
StringBuilder builder = new StringBuilder();
while ((line = lineReader.readLine()) != null) {
builder.append(line);
builder.append(" ");
}
line = builder.toString().trim(); //line
StringBuilder result = getLine(line);
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
ArrayList<String> list = new ArrayList<>();
StringTokenizer st = new StringTokenizer(words[0], " ");
while (st.hasMoreTokens()) list.add(st.nextToken());
char next = 'А';
StringBuilder sb = new StringBuilder();
while (!list.isEmpty()) {
boolean haveMore = false;
for (String s : list) {
char ch = s.toUpperCase().charAt(0);
if (ch == next) {
sb.append(s);
sb.append(" ");
System.out.print(s + " ");
list.remove(s);
next = s.toUpperCase().charAt(s.length() - 1);
haveMore = true;
break;
}
}
if (!haveMore) break;
}
sb.deleteCharAt(sb.length() - 1);
return sb;
}
}
СПИСАЛ:
package com.javarush.test.level22.lesson09.task03;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
/* Составить цепочку слов
В методе main считайте с консоли имя файла, который содержит слова, разделенные пробелом.
В методе getLine используя StringBuilder расставить все слова в таком порядке,
чтобы последняя буква данного слова совпадала с первой буквой следующего не учитывая регистр.
Каждое слово должно участвовать 1 раз.
Метод getLine должен возвращать любой вариант.
Слова разделять пробелом.
В файле не обязательно будет много слов.
Пример тела входного файла:
Киев Нью-Йорк Амстердам Вена Мельбурн
Результат:
Амстердам Мельбурн Нью-Йорк Киев Вена
*/
public class Solution {
public static void main(String[] args) throws IOException {
//...
BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
String fileName = rd.readLine();
rd.close();
StringBuilder sb = new StringBuilder();
BufferedReader reader = new BufferedReader(new FileReader(fileName));
while (reader.ready()) sb.append(sb.length() == 0 ? reader.readLine() : " " + reader.readLine());
reader.close();
StringBuilder result = getLine(sb.toString().split(" "));
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
if (words.length == 0) return new StringBuilder();
else if (words.length == 1) return new StringBuilder(words[0]);
StringBuilder sb = new StringBuilder();
ArrayList<String> list = new ArrayList<>(Arrays.asList(words));
while (list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
if (sb.length() == 0) {
sb.append(list.get(0));
list.remove(0);
}
if (sb.toString().toLowerCase().charAt(sb.length() - 1) == list.get(i).toLowerCase().charAt(0)) {
sb.append(" ").append(list.get(i));
list.remove(i);
i = -1;
}
}
if (list.size() > 0) {
list = new ArrayList<>(Arrays.asList(words));
Collections.shuffle(list);
sb = new StringBuilder();
}
}
// while (!list.isEmpty()) {
// boolean haveMore = false;
// for (String s : list) {
// char ch = s.toUpperCase().charAt(0);
// if (ch == next) {
// sb.append(s);
// sb.append(" ");
// list.remove(s);
// next = s.toUpperCase().charAt(s.length() - 1);
// haveMore = true;
// break;
// }
// }
// if (!haveMore) break;
// }
// if (sb.length() > 0) sb.deleteCharAt(sb.length() - 1);
return sb;
}
}
Leave A Comment