Определение первого символа

203
24 апреля 2017, 02:31

Есть код. В метод передается массив слов String. Задача кода - выстроить слова в таком ключе, чтобы последняя буква предыдущего слова совпадала с первой буквой следующего слова. На входе:

Редька Кокос Сидр Апельсин

На выходе:

Кокос Сидр Редька Апельсин

Первым словом берется слово, первая буква которого не имеет совпадений с последними буквами других слов. Проблема заключается в том, что при определении первой буквы слова, для первого слова из массива первый символ стоит под номером 1 (charAt(1)), а первые символы других слов под номером 0 (charAt(0)).

public class Solution {
    public static void main(String[] args) throws IOException {
        ArrayList<String> array = new ArrayList<>();        
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String name=reader.readLine();
        reader.close();
        BufferedReader reader2 = new BufferedReader(new FileReader(name));
        while (reader2.ready())
        {
            String str= reader2.readLine();
            String[] buf=str.split(" ");
            for (String e:buf)
            {
                array.add(e);
            }
        }
        reader2.close();
        String[] itog = new String[array.size()];
        for (int i=0;i<array.size();i++)
        {
            itog[i]=array.get(i);
            System.out.println(itog[i]);
        }
        StringBuilder result = getLine(itog);
       // System.out.println(result.toString());
    }
    public static StringBuilder getLine(String... words)
    {
        if (words==null)  return null;
        String firstWord="";
        for (int i=0;i<words.length-1;i++)
        {
            int count=0;
            for (int j=i+1;j<words.length;j++)
            {
                if (words[i].toLowerCase().charAt(1)==words[j].toLowerCase().charAt(words[j].length()-1))
                    count++;
                System.out.println(words[i].toLowerCase().charAt(1)+" "+words[j].toLowerCase().charAt(words[j].length()-1));
            }
           // if (count==0) {firstWord=words[i]; break;}
        }
        if (firstWord.equals("")) firstWord=words[0];
        System.out.println(firstWord);
        return null;
    }
}

Я передаю четыре слова в файле:

Редька Кокос Сидр Апельсин

Строку я сплитю по пробелу и заношу в массив строк, который передаю в метод. При обработке приведенного выше кода на выходе получаю:

Редька
Кокос
Сидр
Апельсин
р с
р р
р н
о р
о н
и н

То есть для первого слова из массива на позиции 1 находится первая буква слова (для Редьки это буква "р"), а для всех остальных слов на позиции 1 находятся вторые буквы ("о" для кокоса и т.д.). Почему так происходит (почему первые символы для всех слов не находятся на одной и той же позиции?).

READ ALSO
Крестики-нолики на java

Крестики-нолики на java

Пишу первую игру на JavaС помощью GridLayout создал поле 3 на 3, массив String со значениями O и X

217
RecyclerView внутри другого RecyclerView

RecyclerView внутри другого RecyclerView

Хочу добавить в свою приложуху расписание парВ нашем ВУЗе максимум 5 пар в день, но не факт что таких пар 5 и не факт что в этот день есть пары

242
Как преобразовать массив float в массив long?

Как преобразовать массив float в массив long?

Есть ли возможность сделать это без перечисления? Просто с помощью какого-нибудь приведения

233