2015-07-07 4 views
2

У меня есть массив, в котором передаются три объекта.indexOf для объектов ArrayList в java

List lst = new ArrayList(); 

Здесь экземпляры добавляются через цикл

Circle c1 = new Circle(); 
lst.add(c1); 

Triangle t1 = new Triangle(); 
lst.add(t1) 

Теперь, как я могу использовать метод indexOf или другим способом, чтобы выяснить, какой из них является круг, треугольник и вычислить площадь как и хранить его в арраисте?

+1

Что вы пытаетесь до сих пор? Что такое ошибка/необязательное поведение в этом? –

+0

с использованием интерфейса с методом 'area()'? – fantarama

+0

Я добавил эти классы и сохранил в lst ArrayList. Теперь, я застрял в вычислении области. Я запускаю цикл for, но не знаю, какой объект принадлежит кругу или треугольнику – user3127109

ответ

2

Предполагая, что Circle и Triangle классы продлить Shape, вы можете попробовать это:

List<Shape> lst = new ArrayList<Shape>(); 

Shape c1 = new Circle(); 
Shape t1 = new Triangle(); 
lst.add(c1); 
lst.add(t1); 

for (Shape shape : lst) { 
    if (shape instanceof Circle) { 
     // handle the circle 
    } 
    else if (shape instanceof Triangle) { 
     // handle the Triangle 
    } 
} 
+0

Класс формы может иметь абстрактный метод вычисления площади. в этом случае оба круга и треугольника могут реализовать метод области, чтобы обрабатывать его по-своему. Таким образом, проверка экземпляров не требуется. –

+0

@NayanjyotiDeka Да, и это будет полезно использовать полиморфизм. ОП был очень тонким в отношении деталей реализации, и я не хотел слишком много думать. –

-1

Если вы знаете, что вы будете вставив Circle экземпляры до Triangle экземпляров, то вы можете использовать даже индексы для извлечения экземпляры Circle и нечетные индексы для извлечения экземпляров Triangle. В противном случае вы можете прокручивать список, проверять, является ли каждый объект экземпляром любого класса (например, obj instanceof Circle), а затем выполнять вычисления в вашей области.

for(Object obj : lst){ 
    if(obj instanceof Circle){ 
     Circle circle = (Circle)obj; 
     // Perform the area calculations here 
    }else if(obj instanceof Triangle){ 
     Triangle triangle = (Triangle)obj; 
     // Perform the area calculations here 
    } 
} 
1

Просто позвоните по методу "indexof()". Он может найти.

1
public interface Shape { 
    Long area(); 
} 

public class Circle implements Shape { 
    public Long area() { 
     return 0l; // your code here 
    } 
} 

То же самое для класса Triangle, а затем вычислить площадь и положить в другой список ... (Java 8)

ArrayList<Shape> shapes = new ArrayList<>(); 
shapes.add(new Circle()); 
shapes.add(new Triangle()); 

ArrayList<Long> areas = new ArrayList<>(); 
areas.addAll(shapes.stream().map(s -> s.area()).collect(Collectors.toList())); 
Смежные вопросы