package com.javarush.task.task14.task1404;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStreamReader;
public class Solution {
public static void main(String[] args) throws Exception {
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String nameCat;
while (true){
nameCat = bufferedReader.readLine();
if (nameCat.isEmpty()){
break;
}
}
} catch (Exception e){
System.out.println(e);
}
}
static class CatFactory {
static Cat getCatByKey(String key) {
Cat cat;
switch (key) {
case "vaska":
cat = new MaleCat("Василий");
break;
case "murka":
cat = new FemaleCat("Мурочка");
break;
case "kiska":
cat = new FemaleCat("Кисюлька");
break;
default:
cat = new Cat(key);
break;
}
return cat;
}
}
static class Cat {
private String name;
protected Cat(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public String toString() {
return "Я уличный кот " + getName();
}
}
static class MaleCat extends Cat {
MaleCat(String name) {
super(name);
}
public String toString() {
return "Я - солидный кошак по имени " + getName();
}
}
static class FemaleCat extends Cat {
FemaleCat(String name) {
super(name);
}
public String toString() {
return "Я - милая кошечка по имени " + getName();
}
}
}
Коты
Давай напишем программу, которая будет давать имена всем котикам, выпускаемым на нашей котофабрике.
Для этого нужно:
Считывать строки (параметры) с консоли, пока пользователь не введет пустую строку (Enter).
Для каждого параметра (имени кота):
создать объект cat класса Cat, который равен коту из getCatByKey(String параметр).
вывести на экран cat.toString().
Не понимаю, как сделать вторую часть задания.
Semyon Baryshnikov
25 уровень
Не понимаю, как сделать вторую часть задачи
Обсуждается
Комментарии (9)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Денис Java Developer
18 сентября, 09:26
Вторая часть это что? Как вывести на экран?
System.out.println(cat); должно работать.
0
Semyon Baryshnikov
18 сентября, 09:42
cat.toString должен выводить на экран
0
Semyon Baryshnikov
18 сентября, 09:45
Программа должна создавать объект класса Cat для каждого введенного имени кота (строки, считанной с клавиатуры) c помощью метода getCatByKey.
0
Денис Java Developer
18 сентября, 09:45
Ну так и что тебя смущает? Метод у тебя переопределён во всех классах, просто кидай объект в System.out.println и будет тебе счастье. Если прям хочешь совсем до буквы следовать, то делай на объекте toString()
Учитывая приложенный тобой код все решение это однострочник:
0
Semyon Baryshnikov
18 сентября, 09:48
Огромное спасибо
0
Денис Java Developer
18 сентября, 09:48
У тебя есть фабричный метод, он принимает строку, после чего возвращает объект определённого типа. Собственно это и является созданием объекта, его ты можешь в main вывести на экран, а благодаря тому что метод toString() корректно переопределён вывод даже будет осмысленным.
+1
Semyon Baryshnikov
18 сентября, 09:59
Всё равно валидатор не принимает, сделал двумя способами.
Пишет : Программа должна выводить на экран описание каждого кота (cat.toString).
0
Денис Java Developer
18 сентября, 10:04
Ну так ведь ты проверку на пустую строку в самый низ поставил. Фабричный метод и на такое адекватно отреагирует, но по условию пустые строки обрабатывать не нужно.
Да и вывод на экран ошибки (catch блок) мне тоже кажется сомнительной идеей.
0
Anonymous #3303140
18 сентября, 10:06
проверку на isEmpty стоит перенести сразу после чтения строки. Не думаю, что программа должна делать что-то при пустой строке (если именно пустая строка по условию служит триггером для окончания работы.
Если ты обозначит метод main как throws Exception, то блок catch тоже не нужен. Метод main просто пробросит исключение на уровень джава-машины.
.toString() можно не писать, потому что оно выполняется под капотом:
метод println(Object) внутри вызывает String.valueOf(object). Этот метод в свою очередь вызывает object.toString(), который переопределён в твоём классе Cat.
0