Использую в методе findChain() рекурсию. В debug chain формируется правильная, однако всё же нет выхода из рекурсии. Надеюсь на помощь по этой проблеме!
P.S. Написал несколько return'ов специально, пытался сделать наверняка
Строка else {
String result1 = findChain(array, result);
} не нужна
package com.javarush.task.task22.task2209;
import java.io.*;
import java.util.*;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) {
try (BufferedReader name = new BufferedReader(new InputStreamReader(System.in));
BufferedReader file = new BufferedReader(new FileReader(name.readLine()))) {
StringBuilder builder = new StringBuilder();
while (file.ready()) {
builder.append(Arrays.asList(file.readLine()+" "));
}
StringBuilder result = getLine(builder.toString().trim().replace("[", "").replace("]", ""));
System.out.println(result.toString());
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static StringBuilder getLine(String... words) {
String[] array = words[0].split(" ");
for (int i = 0; i < array.length; i++) {
String result = findChain(array, array[i]);
if (result.split(" ").length == array.length) {
return new StringBuilder(result);
}
else {
String result1 = findChain(array, result);
}
}
return null;
}
public static String findChain(String[] array, String chain) {
if (chain.split(" ").length == array.length) {
return chain;
}
for (String country: array) {
if (!chain.contains(country)) {
if (String.valueOf(chain.charAt(chain.length()-1)).equalsIgnoreCase(String.valueOf(country.charAt(0)))) {
chain += " "+country;
if (chain.split(" ").length == array.length) {
return chain;
}
else {
findChain(array, chain);
}
}
}
}
return chain;
}
}