package com.javarush.task.task14.task1411;
import java.io.BufferedReader;
import java.io.InputStreamReader;
/*
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 = "coder";
while(key.equals("user")||key.equals("loser") ||
key.equals("coder") ||key.equals("proger")){
key = reader.readLine();
if (key.equals("user")) {
person=new Person.User();
doWork(person);
} else if (key.equals("loser")) {
person=new Person.Loser();
doWork(person);
} else if (key.equals("coder")) {
person = new Person.Coder();
doWork(person);
} else if (key.equals("proger")) {
person = new Person.Proger();
doWork(person);
}
}
}
public static void doWork(Person person) {
if (person instanceof Person.User)
{
Person.User person1=(Person.User) person;
person1.live();
}
else if(person instanceof Person.Loser)
{
Person.Loser person1=(Person.Loser) person;
person1.doNothing();
}
else if (person instanceof Person.Coder)
{
Person.Coder person1=(Person.Coder) person;
person1.writeCode();
}
else if (person instanceof Person.Proger)
{
Person.Proger person1=(Person.Proger) person;
person1.enjoy();
}
}
}
Второй вариант так нет???????
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Person person = null;
String key = "coder";
while(key.equals("user")||key.equals("loser") ||
key.equals("coder") ||key.equals("proger")){
key = reader.readLine();
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);
}
}
public static void doWork(Person person) {
if (person instanceof Person.User)
{
new Person.User().live();
}
else if(person instanceof Person.Loser)
{
new Person.Loser().doNothing();
}
else if (person instanceof Person.Coder)
{
new Person.Coder().writeCode();
}
else if (person instanceof Person.Proger)
{
new Person.Proger().enjoy();
}
}
}
БелК в труселях
35 уровень
Доброй ночи. Решил, но пожалуйста объясните почему так правильно, а второй вариант нет? Заранее спасибо
Обсуждается
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Павелстудент на стероидах в Java Syntax Pro beta
11 ноября 2021, 01:22полезный
Во втором варианте отсутствует логика - тебе передают человка (Person) чтобы ты заставил его работать или что он там делает. Ты проверяешь чем этот Person занимается и вместо того чтобы выдать ему задание по способностям, создаешь нового и даешь это задание уже ему:
- так кто тут у нас пришел? - а, User, отлично. Сейчас сдалем нового такого же и пусть живёт и работает.
Представь прогер пришел в отдел кадров, у него проверили документы, сертификаты, всё ок и тут же раз, прямо в кабинете создают нового прогера и отпавляют его работать. А этот стоит и ждёт пока не придёт уборища со шваброй и не выгонит его. Хорошо ещё что не дизинтегрирует.
+2
БелК в труселях
11 ноября 2021, 18:28
Понятно, но выдает правильный результат. Спасибо понял.
0
Павелстудент на стероидах в Java Syntax Pro beta
12 ноября 2021, 01:19
Да конечно. "Правильный" результат здесь можно было получить даже гораздо более простым способом, вообще не заморачиваясь с созданием каких-то Person, а например после ввода информации сразу выводить нужную фразу.
Если я не ошибаюсь, эта задача служит подводкой для следующих тем, в частности про интерфейсы. Как в своё время задание выведи 5 раз что-то служило подготовкой к циклам.
0
БелК в труселях
12 ноября 2021, 13:53
Наверное.
0