JAVA/코드

컬렉션 프레임워크 문제풀기

record2080 2025. 1. 21. 01:19

잠깐만!!!

ArrayList<Circle> a1=new ArrayList<>();
a1.add(null)=new Circle();
a1.add(new Circle()); //무명객체 : 코드가 짧아서;

object의 실제 객체는 원
Circle circle=(Circle)obj; //강제 형변환 (다운캐스팅)

public boolean equals(object obj) {//equals는 급이 맞아야 함
if(!(obj instanceof Circle)) {
retrun false;
}
=> 중요 instanceof 다음 다운캐스팅이 기다리고 있다

 

문제) 원을 생성하기 위해서는 이름과 반지름이 반드시 필요합니다.
        캡슐화를 수행해주세요.

원 객체를 3개 생성하여 리스트에 저장해주세요.
리스트에서 가장 넓이가 큰 원의 이름을 출력해주세요.
단, 원의 넓이가 동일하면 나중에 저장된 원이 출력되도록 해주세요.

 

 

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;

class Circle {
	private String name;
	private int radius;
	private double area;
	static final double PI=3.14;
	Circle(String name,int radius){
		this.name=name;
		this.radius=radius;
		this.area=this.radius*this.radius*Circle.PI;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getRadius() {
		return radius;
	}
	public void setRadius(int radius) {
		this.radius = radius;
	}
	public double getArea() {
		return area;
	}
	public void setArea(double area) {
		this.area = area;
	}
	@Override
	public boolean equals(Object obj) {
		if(!(obj instanceof Circle)) {
			return false;
		}
		Circle circle=(Circle)obj; // 형변환(캐스팅), 다운캐스팅(강제형변환)
		return this.name.equals(circle.name);
	}
	@Override
	public String toString() {
		return "Circle [name=" + name + ", radius=" + radius + ", area=" + area + "]";
	}
}
public class Test01 {
	public static void main(String[] args) {		
		ArrayList<Circle> al=new ArrayList<>();
		al.add(new Circle("도넛",1));
		al.add(new Circle("피자",10));
		al.add(new Circle("도넛",10)); // 무명 객체
		
		double max=al.get(0).getArea();
		int maxIndex=0;
		for(int i=1;i<al.size();i++) {
			if(max <= al.get(i).getArea()) {
				max=al.get(i).getArea();
				maxIndex=i;
			}
		}
		System.out.println(al.get(maxIndex));

 

심화) 원 객체들은 이름이 같다면 반지름이 달라도 같은 객체로 인정합니다.
   이름을 사용자에게 입력받아,
   같은 객체의 개수를 세어 출력해주세요.

Scanner sc=new Scanner(System.in);
		System.out.print("이름 입력 >> ");
		String name=sc.next();

		Circle circle=new Circle(name,0);

		int cnt=0;
		for(Circle v:al) {
			if(v.equals(circle)) { // 비교대상은 "원 객체"!!!!!
				System.out.println(v);
				cnt++;
			}
		}
		System.out.println("cnt = "+cnt);

	}
}