Нынешний код - результат большого окостыливания для валидатора. Но мои попытки четны. Есть набор слов, с помощью которого можно проверить, где может скрываться косяк?
package com.javarush.task.task22.task2209;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
/*
Составить цепочку слов
*/
//Кишинёв Амстердам Киев Москва Владивосток Бостон Пермь Нягань Зеленоград Санкт-Петербург Барнаул Архангельск
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String filename = reader.readLine();
reader.close();
StringBuilder str = new StringBuilder();
BufferedReader fileReader = new BufferedReader(new FileReader(filename));
while (fileReader.ready()){
String a = fileReader.readLine();
str.append(a).append(" ");
}
fileReader.close();
if(str.length() > 0) {
StringBuilder result = getLine(str.toString().split(" "));
System.out.println(result.toString());
}
}
public static StringBuilder getLine(String... words) {
ArrayList<String> temp = new ArrayList<>(Arrays.asList(words));
if (temp.size() > 1) {
StringBuilder result = new StringBuilder();
ArrayList<String> resultArray = new ArrayList<>();
Collections.sort(temp);
for (String s : temp) {
String firstWord = temp.get(0);
if (firstWord.toLowerCase().charAt(firstWord.length() - 1) == s.toLowerCase().charAt(0)) {
resultArray.add(firstWord);
resultArray.add(s);
temp.remove(firstWord);
temp.remove(s);
break;
}
}
for (int i = 0; i < temp.size(); ) {
String resultWord = resultArray.get(resultArray.size() - 1);
String searchWord = temp.get(i);
if (resultWord.toLowerCase().charAt(resultWord.length() - 1) == searchWord.toLowerCase().charAt(0)) {
resultArray.add(searchWord);
temp.remove(searchWord);
i = 0;
} else i++;
}
if (temp.size() > 0) resultArray.addAll(temp);
result.append(resultArray.get(0));
resultArray.remove(0);
for (String s : resultArray) {
result.append(" ").append(s);
}
return result;
}else if (temp.size() == 1) return new StringBuilder(temp.get(0));
else return new StringBuilder();
}
}