Как может выполняться последнее условие без предпоследнего? через графы лень решать. Ведь если "Считай, что абсолютно все слова из исходного списка могут (и должны!) быть включены в результат (лишних слов нет)." , то в теории это правильное решение. Help
package com.javarush.task.task22.task2209;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
/*
Составить цепочку слов
В методе main считай с консоли имя файла, который содержит слова, разделенные пробелом.
В методе getLine используя StringBuilder расставь все слова в таком порядке, чтобы последняя буква
данного слова совпадала с первой буквой следующего не учитывая регистр.
Каждое слово должно участвовать 1 раз.
Считай, что абсолютно все слова из исходного списка могут (и должны!) быть включены в результат (лишних слов нет).
Метод getLine должен возвращать любой правильный вариант при наличии нескольких таковых (см. пример).
Слова разделять пробелом.
Вывести полученную строку на экран.
Пример тела входного файла:
Киев Нью-Йорк Амстердам Вена Мельбурн
Результат:
Амстердам Мельбурн Нью-Йорк Киев Вена
или
Вена Амстердам Мельбурн Нью-Йорк Киев
или
Мельбурн Нью-Йорк Киев Вена Амстердам
и т.п.
Требования:
1. Метод main должен считывать имя файла с клавиатуры.
2. В классе Solution не должно быть статических полей.
3. В методе getLine должен быть использован StringBuilder.
4. Метод getLine должен возвращать пустую строку (пустой StringBuilder) в случае если ему
не были переданы параметры (слова).
5. Метод getLine не должен изменять переданные ему параметры (слова).
6. Все слова переданные в метод getLine должны быть включены в результирующую строку.
7. Вывод на экран должен соответствовать условию задачи.
*/
public class Solution {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
String fileName = sc.nextLine();
sc.close();
BufferedReader bf = new BufferedReader(new FileReader(fileName));
String words ="";
while(bf.ready()){
words += bf.readLine();
}
bf.close();
StringBuilder result = getLine(words);
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
if(words.equals("") || words == null || words.equals(null) || words.length==0){
return new StringBuilder();}
String[] s = words.clone()[0].trim().split(" ");
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < s.length; i++) {
list.add(s[i]);
}
StringBuilder res = new StringBuilder();
while(true){
Collections.shuffle(list);
int count =0;
for (int i = 0; i < list.size(); i++) {
String w="";
String q="";
if(i>0) {
w = String.valueOf(list.get(i).charAt(0));
q = String.valueOf(list.get(i-1).charAt(list.get(i-1).length() - 1));
if(w.equalsIgnoreCase(q)){
count++;
}
}
}
if(count == list.size()-1){
StringBuilder total = new StringBuilder();
for (int i = 0; i < list.size(); i++) {
res.append(list.get(i)+" ");
}
return res;
}
}
}
}