цикл вроде верный. по третьему условию выдает : Метод doWork НЕ должен быть вызван для некорректных строк введенных с клавиатуры.
Получается цикл пропускает ненужные слова
package com.javarush.task.task14.task1411;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
/*
User, Loser, Coder and Proger
*/
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Person person = null;
String key = null;
ArrayList<String> list = new ArrayList<>();
//тут цикл по чтению ключей, пункт 1
do {
key = reader.readLine();
}
while (key.equals("user") || key.equals("proger") || key.equals("loser") || key.equals("coder"));
{
//создаем объект, пункт 2
if (key.equals("user")){
person = new Person.User();
}else if (key.equals("loser")){
person = new Person.Loser();
}else if (key.equals("coder")){
person = new Person.Coder();
}else if (key.equals("proger")){
person = new Person.Proger();
}
doWork(person); //вызываем doWork
}
}
public static void doWork(Person person) {
if (person instanceof Person.User){
((Person.User) person).live();
}else if (person instanceof Person.Loser){
((Person.Loser) person).doNothing();
}else if (person instanceof Person.Coder){
((Person.Coder) person).writeCode();
}else if (person instanceof Person.Proger){
((Person.Proger) person).enjoy();
}
}
}