коллеги, что не нравится Валидатору?
при текущих входных данных
Программа выдает ответы
первый
Киев Вена Амстердам Мельбурн Нью-Йорк
второй (если первый отсечь)
Нью-Йорк Киев Вена Амстердам Мельбурн
третий ( как по условию, если отсекать первые два)
Амстердам Мельбурн Нью-Йорк Киев Вена
код, которым отбрасываю решения
public static StringBuilder getLine(String... words) {
StringBuilder rezult = new StringBuilder();
boolean isFirst = true;
boolean isSecond = true;
for (String word : words) {
if(isFirst) {
isFirst = false;
continue;
} else if (isSecond) {
isSecond = false;
continue;
}
StringBuilder rezultToCompare = new StringBuilder(word);
....
package com.javarush.task.task22.task2209;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UncheckedIOException;
import java.lang.reflect.Array;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/*
Составить цепочку слов
В методе 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) {
//...
String[] words = null;
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in))) {
String fileAddress = bufferedReader.readLine();
StringBuilder stringBuilder = new StringBuilder();
Files.lines(Paths.get(fileAddress)).forEach(ln -> stringBuilder.append(ln + " "));
words = stringBuilder.deleteCharAt(0).toString().replaceAll(" ", " ").trim().split(" ");
} catch (IOException | UncheckedIOException e) {
e.printStackTrace();
}
StringBuilder result = getLine(words);
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
StringBuilder rezult = new StringBuilder();
boolean isFirst = true;
boolean isSecond = true;
for (String word : words) {
if(isFirst) {
isFirst = false;
continue;
} else if (isSecond) {
isSecond = false;
continue;
}
StringBuilder rezultToCompare = new StringBuilder(word);
ArrayList<String> unusedWordsList = new ArrayList<>(Arrays.asList(words));
unusedWordsList.remove(word);
if (unusedWordsList.size() > 0) {
char charWordEnd = word.charAt(word.length() - 1);
rezultToCompare.append(" " + buildLineFromOtherWord(charWordEnd, unusedWordsList));
}
if (rezultToCompare.length() > rezult.length()) rezult = rezultToCompare;
}
return rezult;
}
protected static String buildLineFromOtherWord(char c, ArrayList<String> words) {
StringBuilder rezult = new StringBuilder();
for (String word : words) {
String currentWord = new String(word);
char charWordStart = currentWord.toLowerCase().charAt(0);
if (c == charWordStart) {
StringBuilder rezultToCompare = new StringBuilder(word);
ArrayList<String> unusedWordsList = new ArrayList<>(words);
unusedWordsList.remove(word);
char charWordEnd = word.charAt(word.length() - 1);
rezultToCompare.append(" " + buildLineFromOtherWord(charWordEnd, unusedWordsList));
if (rezultToCompare.length() > rezult.length()) rezult = rezultToCompare;
}
}
return rezult.toString().trim();
}
}