잠깐만!!!
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);
}
}
'JAVA > 코드' 카테고리의 다른 글
과제 2번 - Thread 와 동기화 (0) | 2025.01.22 |
---|---|
과제 1번 - 입출력(IO)을 이용한 업다운 게임 (0) | 2025.01.21 |
컬렉션 프레임워크 문제(과제) (0) | 2025.01.21 |
TEAM과제 -삼중상속 (0) | 2025.01.18 |
포켓몬을 잡아라- 객체배열 (0) | 2025.01.16 |