Почему у меня программа считывает имена котов через строку? Я себя немного недоразвитым начинаю считать, когда час ищу ошибку и не возникает даже идей, из-за чего это происходит)
package com.javarush.task.task14.task1404;
/*
Коты
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
ArrayList<Cat> list = new ArrayList<Cat>();
while (!reader.readLine().isEmpty()){
Cat cat = CatFactory.getCatByKey(reader.readLine());
list.add(cat);
}
System.out.println(list.size());
for (Cat allCats : list) System.out.println(allCats);
//напишите тут ваш код
}
static class CatFactory {
static Cat getCatByKey(String key) {
Cat cat = null;
if ("vaska".equals(key)) {
cat = new MaleCat("Василий");
} else if ("murka".equals(key)) {
cat = new FemaleCat("Мурочка");
} else if ("kiska".equals(key)) {
cat = new FemaleCat("Кисюлька");
} else {
cat = new Cat(key);
}
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();
}
}
}
коткод не вчитывался, но в самом начале вижу явную ошибку: ты и в 16 и в 17 строчке заново считываешь с консоли новую строку. Получается, одну проверил на пустоту, вторую послал в качестве аргумента в фабрику. Исправляйся, считывай в переменную, и ее уже посылай.