Оттвестил на следующих данных:
//String s = "bee Elephant num apple mob Eels elain tea sum mate";
//String s = "Киев Нью-Йорк Амстердам Вена Мельбурн";
//String s = "sum sims mob bee eye eels";
//String s = "sims bee mate eye mob even sum num";
Вроде всё сходится.
Ругается на следующие пункты:
Метод getLine должен возвращать пустую строку (пустой StringBuilder) в случае если ему не были переданы параметры (слова). (при пустой строке возвращается просто new StringBuilder)
Все слова переданные в метод getLine должны быть включены в результирующую строку. (на всех тестах кол-во сошлось)
Вывод на экран должен соответствовать условию задачи. (Вроде соответствует)
package com.javarush.task.task22.task2209;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
/*
Составить цепочку слов
*/
public class Solution {
//static ArrayList<String> result = new ArrayList<>();
public static void main(String[] args) throws IOException {
//...
//StringBuilder result = getLine();
//System.out.println(result.toString());
//List<String> list = new ArrayList<>();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedReader fileReader = new BufferedReader(new InputStreamReader(new FileInputStream(reader.readLine())));
String s = new String();
while (fileReader.ready()){
s = fileReader.readLine();
}
//String s = "bee Elephant num apple mob Eels elain tea sum mate";
//String s = "Киев Нью-Йорк Амстердам Вена Мельбурн";
//String s = "sum sims mob bee eye eels";
//String s = "sims bee mate eye mob even sum num";
//s = s.toLowerCase();
String[] array = s.split(" ");
StringBuilder res = getLine(array);
System.out.println(res);
}
public static ArrayList<String> findResult2(String[] str){
ArrayList<String> result = new ArrayList<>();
for (int i = 0; i < str.length; i++) {
result.add(str[i]);
find(str);
if(result.size() == str.length){
break;
}
else{
result.clear();
}
}
return null;
}
public static ArrayList<String> find(String[] str){
//Подбираю следующее слово. Если нахожу - вызываю этот же метод повторно (рекурсия)
ArrayList<String> result = new ArrayList<>();
for (int i = 0; i < str.length; i++) {
result.add(str[i]);
ArrayList<String> res = find2(str, result);
if(res.size() == str.length){
return res;
}
}
return null;
}
public static ArrayList<String> find2(String[] str, ArrayList<String> result){
for (int i = 0; i < str.length; i++) {
char firstIndexOfSecondWord = str[i].toLowerCase().charAt(0);
//String tmp = result.get(result.size()-1);
//char lastIndexOfFirstWord = tmp.charAt(tmp.length());
char lastIndexOfFirstWord = result.get(result.size()-1).charAt((result.get(result.size()-1).length()-1));
if(!result.contains(str[i]) && firstIndexOfSecondWord == lastIndexOfFirstWord) {
result.add(str[i]);
find2(str, result);
}
}
if(str.length != result.size()){
result.remove(result.size()-1);
}
return result;
}
public static StringBuilder getLine(String... words) {
if(words.length == 1 && words[0].equals("")){
return new StringBuilder();//вроде пункт выполнен
}
ArrayList tmpList = find(words);
StringBuilder result = new StringBuilder();
for (int i = 0; i < tmpList.size(); i++) {
result.append(tmpList.get(i));
if(i != tmpList.size()-1) {
result.append(" ");
}
}
return result;
}
}
/*
public static ArrayList<String> findResult(String[] str){
ArrayList<String> findedChain = new ArrayList<>();
for (int i = 0; i < str.length; i++) {
//findedChain.add(str[i].substring(0, 1).toUpperCase() + str[i].substring(1));
findedChain.add(str[i]);
for (int j = 0; j < str.length; j++) {
if(findedChain.size() == str.length){
break;
}
if(findedChain.contains(str[j])){
continue;
}
if(findedChain.get(findedChain.size()-1).charAt(findedChain.get(findedChain.size()-1).length()-1) == str[j].toLowerCase().charAt(0)){// нужна проверка что его нет в листе
//String tmp = str[j].substring(0, 1).toUpperCase() + str[j].substring(1);
findedChain.add(str[j]);
j = 0;
}
}
if(findedChain.size() == str.length){
break;
}
else{
findedChain.clear();
}
}
return findedChain;
}
*/