При компиляции кода происходит ошибка на java, основная ошибка описанна ниже
Основная ошибка при компиляции кода, нужна помощь, как в таком случае правильно построить структуру, чтобы исправить все ошибки.
Variable 'animal' initializer 'null' is redundant -------- (но без NULL переменная "animal" не принимается Java) 'if' statement can be replaced with 'switch' statement ----------(мне loop c if нужен внутри switch) Parameter 'animal' is never used (все-таки не видит название переменной "animal")
public class MainGenerator {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Animal animal = null;
List<Animal> animalsList = new ArrayList<>();
while (true) {
System.out.println("Введите одну из команд -> ADD, LIST, EXIT: ");
String userCommand = sc.next().toUpperCase();
boolean isCommandValid = false;
for (Command command : Command.values()) {
if (command.name().equals(userCommand)) {
isCommandValid = true;
break;
}
}
if (!isCommandValid) {
System.out.println("Введена неверная команда");
continue;
}
Command myChose = valueOf(userCommand);
switch (myChose) {
case ADD:
System.out.println("Какое у Вас домашнее животное (Dog, Duck, Cat)? ");
String animalType = sc.next();
animal = null;
if (animalType.equals("cat")) {
animal = new Cat();
} else if (animalType.equals("dog")) {
animal = new Dog();
} else if (animalType.equals("duck")) {
animal = new Duck();
}
fillAnimal(sc, animal);
assert animal != null;
animal.say(); //NullPointerException??
animalsList.add(animal);
break;
case LIST:
for (Animal animals : animalsList) {
System.out.println(animals);
}
break;
case EXIT:
System.out.println("До встречи");
System.exit(0);
default:
System.out.println("Неизвестный тип команды");
throw new IllegalStateException("Unexpected value: " + myChose);
}
}
}
private static void fillAnimal(@NotNull Scanner sc, Animal animal) {
if (!sc.hasNext()) {
System.out.println("Вы ввели не название животного, повторите ввод данных");
}
System.out.println("Введите кличку животного");
sc.next();
if (!sc.hasNext()) {
System.out.println("Вы ввели не слово, повторите ввод данных");
}
System.out.println("Введите возраст животного");
sc.nextInt();
if (!sc.hasNextInt()) {
System.out.println("Вы ввели не число, повторите ввод данных");
}
System.out.println("Введите вес животного");
sc.nextInt();
if (!sc.hasNextInt()) {
System.out.println("Вы ввели не число, повторите ввод данных");
}
System.out.println("Введите цвет шерсти животного");
sc.next();
if (!sc.hasNext()) {
System.out.println("Вы ввели не слово, повторите ввод данных");
}
}
}