МОЙ ВАРИАНТ:
package com.javarush.test.level22.lesson09.task03; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.StringTokenizer; /* Составить цепочку слов В методе main считайте с консоли имя файла, который содержит слова, разделенные пробелом. В методе getLine используя StringBuilder расставить все слова в таком порядке, чтобы последняя буква данного слова совпадала с первой буквой следующего не учитывая регистр. Каждое слово должно участвовать 1 раз. Метод getLine должен возвращать любой вариант. Слова разделять пробелом. В файле не обязательно будет много слов. Пример тела входного файла: Киев Нью-Йорк Амстердам Вена Мельбурн Результат: Амстердам Мельбурн Нью-Йорк Киев Вена */ public class Solution { public static void main(String[] args) throws IOException { //... BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String fileName = reader.readLine(); BufferedReader lineReader = new BufferedReader(new InputStreamReader (new FileInputStream(fileName), StandardCharsets.UTF_8)); String line; StringBuilder builder = new StringBuilder(); while ((line = lineReader.readLine()) != null) { builder.append(line); builder.append(" "); } line = builder.toString().trim(); //line StringBuilder result = getLine(line); System.out.println(result.toString()); } public static StringBuilder getLine(String... words) { ArrayList<String> list = new ArrayList<>(); StringTokenizer st = new StringTokenizer(words[0], " "); while (st.hasMoreTokens()) list.add(st.nextToken()); char next = 'А'; StringBuilder sb = new StringBuilder(); while (!list.isEmpty()) { boolean haveMore = false; for (String s : list) { char ch = s.toUpperCase().charAt(0); if (ch == next) { sb.append(s); sb.append(" "); System.out.print(s + " "); list.remove(s); next = s.toUpperCase().charAt(s.length() - 1); haveMore = true; break; } } if (!haveMore) break; } sb.deleteCharAt(sb.length() - 1); return sb; } }
СПИСАЛ:
package com.javarush.test.level22.lesson09.task03; import java.io.*; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; /* Составить цепочку слов В методе main считайте с консоли имя файла, который содержит слова, разделенные пробелом. В методе getLine используя StringBuilder расставить все слова в таком порядке, чтобы последняя буква данного слова совпадала с первой буквой следующего не учитывая регистр. Каждое слово должно участвовать 1 раз. Метод getLine должен возвращать любой вариант. Слова разделять пробелом. В файле не обязательно будет много слов. Пример тела входного файла: Киев Нью-Йорк Амстердам Вена Мельбурн Результат: Амстердам Мельбурн Нью-Йорк Киев Вена */ public class Solution { public static void main(String[] args) throws IOException { //... BufferedReader rd = new BufferedReader(new InputStreamReader(System.in)); String fileName = rd.readLine(); rd.close(); StringBuilder sb = new StringBuilder(); BufferedReader reader = new BufferedReader(new FileReader(fileName)); while (reader.ready()) sb.append(sb.length() == 0 ? reader.readLine() : " " + reader.readLine()); reader.close(); StringBuilder result = getLine(sb.toString().split(" ")); System.out.println(result.toString()); } public static StringBuilder getLine(String... words) { if (words.length == 0) return new StringBuilder(); else if (words.length == 1) return new StringBuilder(words[0]); StringBuilder sb = new StringBuilder(); ArrayList<String> list = new ArrayList<>(Arrays.asList(words)); while (list.size() > 0) { for (int i = 0; i < list.size(); i++) { if (sb.length() == 0) { sb.append(list.get(0)); list.remove(0); } if (sb.toString().toLowerCase().charAt(sb.length() - 1) == list.get(i).toLowerCase().charAt(0)) { sb.append(" ").append(list.get(i)); list.remove(i); i = -1; } } if (list.size() > 0) { list = new ArrayList<>(Arrays.asList(words)); Collections.shuffle(list); sb = new StringBuilder(); } } // while (!list.isEmpty()) { // boolean haveMore = false; // for (String s : list) { // char ch = s.toUpperCase().charAt(0); // if (ch == next) { // sb.append(s); // sb.append(" "); // list.remove(s); // next = s.toUpperCase().charAt(s.length() - 1); // haveMore = true; // break; // } // } // if (!haveMore) break; // } // if (sb.length() > 0) sb.deleteCharAt(sb.length() - 1); return sb; } }
Leave A Comment