Если я правильно понимаю предпослений пункт, то в строку вывода не надо добавлять те города, которые не коннектятся друг с другом (В моем примере таки добавлено 3). И, логично было бы не приклеивать к отсортированной строке те города. что не вписались. Но тогда еще и последний пункт зажигается. Что же не так у меня или валика?
public static StringBuilder getLine(String... words) {
Arrays.sort(words);
StringBuilder str = new StringBuilder();
StringBuilder lost = new StringBuilder();
if (words == null || words.length == 0)
return str;
str.append(words[0]);
for (int j = 1; j < words.length; j ++) {
String begin = str.substring(0, 1).toLowerCase();
String end = str.substring(str.length() - 1, str.length()).toLowerCase();
String beginJ = words[j].substring(0, 1).toLowerCase();
String endJ = words[j].substring(words[j].length() - 1, words[j].length());
if (beginJ.equals(end)) {
str.append(" ");
str.append(words[j]);
words[j] = null;
} else if (endJ.equals(begin)) {
String tmp = words[j] + " " + str;
str = new StringBuilder(tmp);
words[j] = null;
}
else {
lost.append(" ");
lost.append(words[j]);
}
}
return str.append(lost);
}
А не проходит вот это пункт: Все слова переданные в метод getLine должны быть включены в результирующую строку, если это возможно.package com.javarush.task.task22.task2209;
import java.io.*;
import java.util.Arrays;
import java.util.Scanner;
/*
Составить цепочку слов
*/
public class Solution {
private static String file;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
file = br.readLine();
br.close();
StringBuilder sb = new StringBuilder();
Scanner sc = new Scanner(new FileInputStream(file));
while (sc.hasNext()){
sb.append(sc.next());
sb.append(" ");
}
// System.out.println("sb: " + sb.toString());
//...
StringBuilder result = getLine(sb.toString().split(" "));
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) throws FileNotFoundException {
Arrays.sort(words);
StringBuilder str = new StringBuilder();
StringBuilder lost = new StringBuilder();
if (words == null || words.length == 0)
return str;
str.append(words[0]);
for (int j = 1; j < words.length; j ++) {
String begin = str.substring(0, 1).toLowerCase();
String end = str.substring(str.length() - 1, str.length()).toLowerCase();
String beginJ = words[j].substring(0, 1).toLowerCase();
String endJ = words[j].substring(words[j].length() - 1, words[j].length());
if (beginJ.equals(end)) {
str.append(" ");
str.append(words[j]);
words[j] = null;
} else if (endJ.equals(begin)) {
String tmp = words[j] + " " + str;
str = new StringBuilder(tmp);
words[j] = null;
}
else {
lost.append(" ");
lost.append(words[j]);
}
}
return str.append(lost);
}
}