Reputation: 77
Basically I have an ArrayList of Objects. There are different types of objects, such as Triangles, Rectangles, and Spheres. Each object has its own method, such as getArea, getPerimeter, and getVolume. These methods are different for each object. How do I iterate through the ArrayList to print out all of the methods of each object?
So say I start with a Triangle. How do I print its getArea and getPerimeter methods with a for loop and a switch block / if statement?
Upvotes: 0
Views: 1270
Reputation: 11132
Why not use an Interface?
package com.spiderman;
public interface Shape {
public void getArea();
public void getPerimeter();
public void getVolume();
}
package com.spiderman;
public class Rectangle implements Shape {
@Override
public void getArea() {
System.out.println("area of Rectangle");
}
@Override
public void getPerimeter() {
System.out.println("perimiter of Rectangle");
}
@Override
public void getVolume() {
System.out.println("volume of Rectangle");
}
}
package com.spiderman;
public class Triangle implements Shape {
@Override
public void getArea() {
System.out.println("area of Triangle");
}
@Override
public void getPerimeter() {
System.out.println("perimiter of Triangle");
}
@Override
public void getVolume() {
System.out.println("volume of Triangle");
}
}
package com.prash;
public class Sphere implements Shape {
@Override
public void getArea() {
System.out.println("area of Sphere");
}
@Override
public void getPerimeter() {
System.out.println("perimiter of Sphere");
}
@Override
public void getVolume() {
System.out.println("volume of Sphere");
}
}
package com.spiderman;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Shape> list = new ArrayList<Shape>();
list.add(new Rectangle());
list.add(new Triangle());
list.add(new Sphere());
for (int i = 0; i < list.size(); i++) {
Shape shape = list.get(i);
shape.getArea();
shape.getPerimeter();
shape.getVolume();
System.out.println("------------------");
}
}
}
OUTPUT:
area of Rectangle
perimiter of Rectangle
volume of Rectangle
area of Triangle
perimiter of Triangle
volume of Triangle
area of Sphere
perimiter of Sphere
volume of Sphere
Upvotes: 0
Reputation: 1
Check this. An alternative to instanceof operator
ArrayList arr=new ArrayList();
arr.add(new Traingle());
arr.add(new Rectangle());
arr.add(new Sphere());
for(Object obj:arr){
int value=0;
switch (obj.getClass().getSimpleName()){
case "Rectangle":
value=((Rectangle) obj).getPerimeter();
break;
case "Traingle":
value=((Traingle) obj).getArea();
break;
case "Sphere":
value=((Sphere) obj).getVolume();
break;
default:
break;
}
System.out.println("Object "+obj.getClass().getSimpleName()+":"+value);
}
Upvotes: 0
Reputation: 1109
for(int i=0; i<listOfObjects.length; i++) {
Object obj = listOfObjects[i];
if (obj instanceof Triangle) {
Triangle t = (Triangle) obj;
t.getArea();
} else if (obj instanceof Rectangle) {
Rectangle r = (Rectangle) obj;
r.getPerimeter();
} else {
Sphere s = (Sphere) obj;
s.getSomeOtherThing();
}
}
Upvotes: 0
Reputation: 4006
You can use a simple for loop to iterate over your ArrayList
, and then call the toString()
method of the object:
for (int = 0; i < arrayList.size(); i++)
{
System.out.println(arrayList.get(i).toString());
}
To override the toString
method of your class, just add the method, pretty simple:
class Rectangle
{
//Member variables
int width, height; //Example
//Member functions
getArea { ... }
//toString
public String toString()
{
return String.valueOf(getArea());
}
}
Upvotes: 1