instanceof and Casting
Completed
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
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);
}
}