package com.javarush.task.task22.task2201;
/*
Строки нитей или строковые нити? Вот в чем вопрос
*/
public class Solution {
public static void main(String[] args) {
new Solution();
}
public static final String FIRST_THREAD_NAME = "1#";
public static final String SECOND_THREAD_NAME = "2#";
private Thread thread1;
private Thread thread2;
private Thread thread3;
public Solution() {
initThreads();
}
protected void initThreads() {
this.thread1 = new Thread(new Task(this, "A\tB\tC\tD\tE\tF\tG\tH\tI"), FIRST_THREAD_NAME);
this.thread2 = new Thread(new Task(this, "J\tK\tL\tM\tN\tO\tP\tQ\tR\tS\tT\tU\tV\tW\tX\tY\tZ"), SECOND_THREAD_NAME);
this.thread3 = new Thread(new Task(this, "\t\t"), "3#");
Thread.setDefaultUncaughtExceptionHandler(new OurUncaughtExceptionHandler());
this.thread1.start();
this.thread2.start();
this.thread3.start();
}
public synchronized String getPartOfString(String string, String threadName) {
String result = "";
try {
result = string.substring(string.indexOf('\t') + 1, string.lastIndexOf('\t'));
} catch (Exception e) {
if(threadName.equals(FIRST_THREAD_NAME)) throw new StringForFirstThreadTooShortException();
else if(threadName.equals(SECOND_THREAD_NAME)) throw new StringForSecondThreadTooShortException();
else throw new RuntimeException(e);
}
return result;
}
}
Soros
39 уровень
В чём может быть проблема?
Решен
Комментарии (10)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia Volkova Java Developer в DXC Master
21 января 2020, 09:26
а если вот это
заменить на e.toString() ? 0
Soros
21 января 2020, 10:02
Если в 20-й строке заменить
на
То вывод для Other тоже не будет соответствовать шаблону из условия. Из условия должно быть:
c e.toString будет
Зачем? Ведь проблемы только с First и Second, с Other проблем нет. 0
Ksenia Volkova Java Developer в DXC Master
21 января 2020, 10:33
Да мне кажется, везде эти навороты лишние.
Тебе уже дана строка для форматирования
Надо в нее подставить подходящие значения. И ничего к ней не надо прибавлять.
Что-то вроде:
И всё. 0
Soros
21 января 2020, 15:26
Наворотов там нет. Дополнительная строка из-за того, что, кроме необходимости учитывать пробелы по сторонам от двоеточий, строка для форматирования "%s : %s : %s" создана для 3-х переменных. В заданном шаблоне требуется вывести больше данных. Например для Second:
а) java.lang.StringIndexOutOfBoundsException - выводит конструкция e.getCause().getClass().getCanonicalName()
б) String index out of range: -1 - выводит конструкция e.getCause().getMessage()
в) StringForSecondThreadTooShortException - выводит конструкция e.getClass().getSimpleName()
г) 2# - t.getName()
Не пойму, почему не принимается решение. 0
Ksenia Volkova Java Developer в DXC Master
21 января 2020, 15:32
Шаблон не случайно задан на 3 элемента - потому что все эти строки можно разделить как раз на 3 части.
"java.lang.StringIndexOutOfBoundsException: String index out of range: -1" - вполне может быть одной частью, а не двумя кусками - e.getCause.toString()
0
Soros
21 января 2020, 15:57
Так-то оно так, но в этом варианте появляются лишние пробелы.
Код
даёт результат:
а нужно
Появился лишний пробел между ...Exception: и String
Поэтому изначально и был костыль в виде добавочной строки. Или твой вариант может быть без лишнего пробела? 0
Ksenia Volkova Java Developer в DXC Master
21 января 2020, 16:27
Ты так говоришь, как будто этот пробел с потолка взялся, а не ты сам своими руками его прописал в getCause().
Да и в принципе не очень-то правильно хардкодить getCause() вместо того, чтобы перехваченный эксепшн передать в конструктор твоих ...TooShortException
Тогда и переопределять ничего уже не надо будет, getCause и так вернет то, что нужно.
Поэтому-то у тебя Other проходит нормально, а First и Second - нет. 0
Soros
21 января 2020, 16:44
Не совсем понимаю, где я этот пробел мог сам прописать?
0
Ksenia Volkova Java Developer в DXC Master
21 января 2020, 20:00
Вот этого в задаче не было, это ты сам написал. И в начале строки лишний пробел.
Но даже если бы его не было - подход неверный.
0
Soros
22 января 2020, 07:07
Точно. Не заметил этого пробела. Спасибо.
Забыл о переопределении этого метода.
Задача просто мутная.
Код исправил, а проблема осталась.
Создал новую тему.
0