как правильно использовать метод instanceof

255
15 апреля 2022, 09:20

Дана задача: Создать статический метод printMagazines(Printable[] printable) в классе Magazine, который выводит на консоль названия только журналов. Создать статический метод printBooks(Printable[] printable) в классе Book, который выводит на консоль названия только книг. Используем оператор instanceof. Метод написала, но его выполнение приводит к ошибке. Помогите пожалуйста :) Код:

public class Main {
    public static void main(String[] args) {
 Printable[] test=new Printable[3];
 test[0]=new Book();
 test[1]=new Magazine("keke");
 test[2]=new Book();
        int k=0;
 for (Printable i:test){
     test[k].print();
k++;
 }
     **if   (test[k] instanceof Magazine){
         int l=0;
       ((Magazine) test[k]).printMagazines(test);
         k++;
     }**
    }}
public interface Printable {
    Printable print();
}
public class Book implements Printable {
    String name;
    @Override
    public Printable print() {
        System.out.println("1");
        return null;
    }
   public void printBooks(Printable[] printable){
       Printable b=print();
       System.out.println(b);
   }
}
public class Magazine implements Printable {
String name;
Magazine(String name){
    this.name=name;
}
    @Override
    public Printable print() {
        System.out.println("2");
        return null;
    }
   public void    printMagazines(Printable[] printable){
       System.out.println(name);
    }
}

Ошибка: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3 at Main.main(Main.java:19)

Заранее спасибо!

Answer 1
public class Magazine implements Printable {
  ...
  public static void printMagazines(Printable[] printables) {
    for (Printable p: printables) {
      if (p instanceof Magazine)
        p.print();
    }
  }
}
Magazine.printMagazines(test);
READ ALSO
Java задача на использование Swing

Java задача на использование Swing

Необходимо написать программу, в которой при нажатии мышки создаётся квадратик синего цвета, при двойном нажатии на синий квадратик цвет...

199
Как исправить ошибку парсинга

Как исправить ошибку парсинга

написал код пытаюсь парсить firebase realtime NotificationFragmentjava

133
Не могу найти ошибку в формуле. Код Java, он на c# тоже работает(если переделать ввод и вывод)

Не могу найти ошибку в формуле. Код Java, он на c# тоже работает(если переделать ввод и вывод)

я делаю приложение, выводящее спираль(в целях образования)Но спираль выводится с редкими придатками, в местах отклоняющихся на на количество...

128
Превратить строку в n-массивов символов

Превратить строку в n-массивов символов

Как из содержимого массива String[] subStr;, где i = n создать n массивов, уже заполненные содержимым из nНапример i = 3, создать соответственно 3 новых...

94