noobforce
noobforce

Reputation: 77

Java - How to print methods of a certain object from ArrayList?

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

Answers (4)

spiderman
spiderman

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

Venkatesh
Venkatesh

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

the.wizard
the.wizard

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

Shadow
Shadow

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

Related Questions