level22.lesson09.task03 - ни в какую не принимается!!!

package com.javarush.test.level22.lesson09.task03;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;


/* Составить цепочку слов
В методе main считайте с консоли имя файла, который содержит слова, разделенные пробелом.
В методе getLine используя StringBuilder расставить все слова в таком порядке,
чтобы последняя буква данного слова совпадала с первой буквой следующего не учитывая регистр.
Каждое слово должно участвовать 1 раз.
Метод getLine должен возвращать любой вариант.
Слова разделять пробелом.
В файле не обязательно будет много слов.

Пример тела входного файла:
Киев Нью-Йорк Амстердам Вена Мельбурн

Результат:
Амстердам Мельбурн Нью-Йорк Киев Вена
*/
public class Solution {
    public static void main(String[] args) throws Exception {

        BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
        String fileName = consoleReader.readLine();
        consoleReader.close();

        BufferedReader fileReader = new BufferedReader(new FileReader(fileName));
        String[] words = fileReader.readLine().split(" ");
        fileReader.close();

        StringBuilder result = getLine(words);
        System.out.println(result.toString());
    }

    public static StringBuilder getLine(String... words) {
        if (words == null || words.length == 0) return null;
        StringBuilder sb = new StringBuilder();
        for (String s : words) {
            if (!sb.toString().contains(s)) {
                if (sb.toString().isEmpty()) {
                    sb.append(s + " ");
                } else {
                    String sbFirstChar = sb.toString().trim().substring(0, 1);
                    String sbLastChar = sb.toString().trim().substring(sb.toString().trim().length() - 1);
                    String wordFirstChar = s.substring(0, 1);
                    String wordLastChar = s.substring(s.length() - 1);

                    if (sbFirstChar.equalsIgnoreCase(wordLastChar)) {
                        sb.insert(0, s + " ");
                    } else if (sbLastChar.equalsIgnoreCase(wordFirstChar)) {
                        sb.append(s + " ");
                    }
                }
            }
        }
        return sb;
    }
}


Что я упустил??? Проверки сделал, все равно чего-то не хватает компилятору

3 комментария

odium
можно переписать с методом Collections.shuffle, думаю так будет проще.
Archie369
можно, но если слов в файле будет миллион, это он пока в рэндом попадет, год пройдет :-)
odium
Ваш код у меня вообще не работает — вывод получается «Киев Вена». Если уж начали писать ручную сортировку а не шафлом то можно поступить следующим образом — добавьте список куда слейте слова. В стрингбилдер добавляете первое слово, соответственно из списка удаляете. У вас всего один цикл, добавьте еще один вложенный и дальше уже пишите условия сравнения сб со списком. Да, условия у вас тоже немного некорректно составлены. Надеюсь не очень палевно расписал)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.