Есть функция utilityGetline.
Она строит цепочку слов. На верхушке стека при n == 2 появляется нужная мне цепочка.
Как вытащить это знаение, не используя статическое поле? (не разрешается условиями задачи)
package com.javarush.task.task22.task2209;
/*
Составить цепочку слов
*/
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Solution {
public static StringBuilder stringBuilder = new StringBuilder("");
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String fileName = br.readLine();
FileReader fr = new FileReader(fileName);
String input = "";
while (fr.ready()) {
input += (char) fr.read();
}
fr.close();
// String[] array = input.split("\\s");
StringBuilder result = getLine(input);
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
StringBuilder sb = new StringBuilder("");
if (words == null) {
return sb;
}
String[] array = words[0].split("\\s");
// sb = utilityGetline(sb, array.length, array);
utilityGetline(sb, array.length, array);
// String firstWord = gotFirstWord(words);
// sb.append(firstWord);
// for (int i = 0; i < words.length; i++) {
// if (words[i].equals(sb.toString())) {
// words[i] = null;
// }
//
// }
// boolean check = true;
// while(check) {
// for (int i = 0; i < words.length; i++) {
// String word = words[i];
// if (word != null) {
// if (word.toLowerCase().startsWith(String.valueOf(sb.charAt(sb.length() - 1)))) {
// if (hasNext(word, words)) {
// sb.append(" ");
// sb.append(word);
// words[i] = null;
// }
// }
// }
// }
// check = false;
// int count = 0;
// for (int i = 0; i < words.length; i++) {
// if (words[i] != null) {
// check = true;
// count++;
// }
// }
// if (count == 1) {
// for (String word : words) {
// if (word != null) {
// sb.append(" ");
// sb.append(word);
// check = false;
// }
// }
// }
// }}
return sb;
}
public static void utilityGetline(StringBuilder sb, int n, String[] array) {
if (n == 2) {
stringBuilder = sb;
}
for (int i = 0; i < array.length; i++) {
if (sb.toString().equals("")) {
sb.append(array[i]);
} else {
if (sb.indexOf(array[i]) == -1 && sb.toString().endsWith(String.valueOf(array[i].charAt(0)).toLowerCase())) {
utilityGetline(sb.append(" ").append(array[i]),n - 1, array);
if (Arrays.equals(sb.toString().split("\\s"), array)) {
break;
}
}
}
}
// return new StringBuilder(result);
}
public static boolean hasPrevious(String input, String... words) {
for (int i = 0; i < words.length; i++) {
if (words[i] != null) {
String temp = words[i];
if (!input.equals(words[i]) && input.toLowerCase().startsWith(String.valueOf(temp.charAt(temp.length() - 1)))) {
return true;
}
}
}
return false;
}
public static boolean hasNext(String input, String... words) {
for (int i = 0; i < words.length; i++) {
if (words[i] != null) {
String temp = words[i];
if (!input.equalsIgnoreCase(words[i]) && input.endsWith(String.valueOf(temp.charAt(0)).toLowerCase())) {
return true;
}
}
}
return false;
}
public static String gotFirstWord(String... words) {
//searching for 100% first word
for (int i = 0; i < words.length; i++) {
String word = words[i];
if (!hasPrevious(word, words)/* && hasNext(word, words)*/) return word;
}
//searching foe maybe first word
for (int i = 0; i < words.length; i++) {
String word = words[i];
if (hasNext(word, words)) return word;
}
return null;
}
}