Пользуюсь помощью 3й раз за все 16 уровней. И второй раз из 3х по этой задаче.
Все работает, методы выводят нужные строки, но последние 4 условия о вызове методов в соответствии с классами не проходят проверки.
package com.javarush.task.task14.task1411;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
/*
User, Loser, Coder and Proger
*/
public class Solution {
private final static String[] keys = {"user", "loser", "coder", "proger"};
private static ArrayList<String> list = new ArrayList<>();
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Person person = null;
String key = null;
list.add("user");
list.add("loser");
list.add("coder");
list.add("proger");
//тут цикл по чтению ключей, пункт 1
//String buf;
while (true)
{
key = reader.readLine();
if (list.contains(key)) {
//System.out.println("test");
for (int i = 0; i < list.size(); i++) {
//System.out.println("test i: " + i + "buf: " + buf + "list: " + list.get(i));
if (list.get(i).equals(key)) {
switch (i) {
case 0: person = new Person.User(); break;
case 1: person = new Person.Loser(); break;
case 2: person = new Person.Coder(); break;
case 3: person = new Person.Proger(); break;
}
}
}
}
else {
break;
}
//System.out.println();
//создаем объект, пункт 2
doWork(person); //вызываем doWork
}
}
public static void doWork(Person person) {
// пункт 3
if (person.getClass().getSimpleName().toLowerCase().equals(list.get(0))) {
((Person.User) person).live();
}
else if (person.getClass().getSimpleName().toLowerCase().equals(list.get(1))) {
((Person.Loser) person).doNothing();
}
else if (person.getClass().getSimpleName().toLowerCase().equals(list.get(2))) {
((Person.Coder) person).writeCode();
}
else if (person.getClass().getSimpleName().toLowerCase().equals(list.get(3))) {
((Person.Proger) person).enjoy();
}
}
}