instanceof and Casting

Lab Java Intermediate 20 points

Given classes Shape, Circle(r) and Square(s), read shapes into a Shape[], then count the circles and print the largest square side using instanceof and a cast.

Input

n, then lines circle r / square s.

Output

circles=C largestSquare=S (S is 0 if none).

Example

Input

4
circle 2
square 5
square 9
circle 1

Output

circles=2 largestSquare=9
Sample input available Sample output available
Editor
Java

Hints

s instanceof Square checks the real type.

((Square) s).side casts so you can reach Square's field.

Solution explanation

Needing many instanceof checks is often a sign a method should be overridden instead - see the next chapter.

Show solution
import java.util.Scanner;

class Shape {}

class Circle extends Shape {
    final int r;

    Circle(int r) {
        this.r = r;
    }
}

class Square extends Shape {
    final int side;

    Square(int side) {
        this.side = side;
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        Shape[] shapes = new Shape[n];
        for (int i = 0; i < n; i++) {
            String kind = sc.next();
            int size = sc.nextInt();
            shapes[i] = kind.equals("circle") ? new Circle(size) : new Square(size);
        }
        int circles = 0, largest = 0;
        for (Shape s : shapes) {
            if (s instanceof Circle) {
                circles++;
            } else if (s instanceof Square) {
                largest = Math.max(largest, ((Square) s).side);
            }
        }
        System.out.println("circles=" + circles + " largestSquare=" + largest);
    }
}
Output
Answer
HOME LEARN COMMUNITY DASHBOARD