▶주소값 비교
package java_0929;
class Circle{
private int radius;
public Circle(int radius) {
this.radius = radius;
}
}
public class CircleTest {
public static void main(String[] args) {
Circle obj1 = new Circle(10);
Circle obj2 = new Circle(10);
if(obj1 == obj2) System.out.println("2개의 원은 같습니다.");
else System.out.println("2개의 원은 같지 않습니다.");
}
}
위 코드는 객체의 주솟값끼리 비교하게 되기 때문에 같지 않습니다.를 출력하게 된다.
System.out.println(obj1);
System.out.println(obj2);
java_0929.Circle@5d22bbb7
java_0929.Circle@41a4555e
▶직접 만든 equals
package java_0929;
class Circle {
private int radius;
public Circle(int radius) {
this.radius = radius;
}
public int getRadius() {
return radius;
}
public boolean equals(Circle c1) {
if(this.radius == c1.getRadius())
return true;
else
return false;
}
}
public class CircleTest {
public static void main(String[] args) {
Circle obj1 = new Circle(10);
Circle obj2 = new Circle(10);
if (obj1.equals(obj2))
System.out.println("2개의 원은 같습니다.");
else
System.out.println("2개의 원은 같지 않습니다.");
}
}
▶Object클래스 사용 - Circle
package java_0929;
class Circle {
...
@Override
public boolean equals(Object obj) {
if (obj instanceof Circle) {
Circle circle = (Circle) obj;
if (this.radius == circle.getRadius())
return true;
}
return false;
}
}
...
이번에는 Object클래스 메소드를 Override해보았다.
▶Object클래스 사용2 - INum
package java_0929;
class INum {
private int num;
public INum(int num) {
this.num = num;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof INum) {
INum inum2 = (INum) obj;
if (this.num == inum2.getNum())
return true;
}
return false;
}
private int getNum() {
return num;
}
}
public class CircleTest {
public static void main(String[] args) {
INum num1 = new INum(10);
INum num2 = new INum(12);
INum num3 = new INum(10);
if (num1.equals(num2))
System.out.println("num1, num2 내용 동일하다.");
else
System.out.println("num1, num2 내용 다르다.");
if (num1.equals(num3))
System.out.println("num1, num3 내용 동일하다.");
else
System.out.println("num1, num3 내용 다르다.");
}
}
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
▶예시
public class CircleTest {
public static void main(String[] args) {
Object obj = new Object();
System.out.println(obj.toString());
System.out.println(obj);
}
}
java.lang.Object@762efe5d
java.lang.Object@762efe5d
public class CircleTest {
public static void main(String[] args) {
Student s = new Student("홍길동", "남자");
System.out.println(s);
}
}
이름은 홍길동이고 성별은 남자입니다.
▶예시
package java_0929;
class Student {
private String name, gender;
public Student(String name, String gender) {
this.name = name;
this.gender = gender;
}
@Override
public String toString() {
return "이름은 " + name + "이고 성별은 " + gender + "입니다.";
}
}
private final byte[] value;
이와 같은 배열에 아스키 코드 값 형태로 저장된다.
2가지 방식으로 String을 객체를 생성할 수 있다.
▶사용예시
public static void main(String[] args) {
String str = new String("아아아");
String str1 = "아아아";
char ch = '1'; //char형은 작은 따옴표
}
public class Test {
public static void main(String[] args) {
String s1 = "Java";
String s2 = "Java";
String s3 = new String("Java");
String s4 = new String("Java");
if(s1 == s2)
System.out.println("true");
else
System.out.println("false");
if(s3 == s4)
System.out.println("true");
else
System.out.println("false");
if(s3.equals(s4))
System.out.println("true");
else
System.out.println("false");
}
}
true
false
true
package java_0929;
public class Test {
public static void main(String[] args) {
String subject = "자바 프로그래밍";
char charValue = subject.charAt(3);
System.out.println(charValue);
}
}
public class Test {
public static void main(String[] args) {
String str = "the cat is on the table";
int index = str.indexOf("table");
if(index ==-1)
System.out.println("table은 없습니다.");
else
System.out.println("table의 위치: " + index);
}
}
package java_0929;
public class Test {
public static void main(String[] args) {
String str = "the cat is on the table";
System.out.println(str.length());
}
}
▶실습
public class Test {
public static void main(String[] args) {
String[] strArr = { "akbce", "봄", "가을" };
System.out.println(stringCount(strArr));
}
스트링 배열안에 있는 글자수의 합을 반환하는 stringCount 구현
private static int stringCount(String[] strArr) {
int total = 0;
for (String str : strArr) {
total += str.length();
}
return total;
}
package java_0929;
public class Test {
public static void main(String[] args) {
String[] tokens = "I am a boy".split(" ");
for (String str : tokens) {
System.out.println(str);
}
}
}
Scanner를 이용하여 한 라인을 읽고, 공백으로 분리된 어절이 몇 개 들어 있는지 "그만"을 입력할 때까지 반복하는 프로그램을 작성하라.
package java_0929;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str;
while(true) {
str = sc.nextLine();
if(str.equals("그만")) {
System.out.println("종료합니다.");
break;
}
else {
String[] token = str.split(" ");
System.out.println("어절 개수는 "+token.length);
}
}
}
}
package java_0929;
public class Test {
public static void main(String args[]) {
Buyer b = new Buyer();
b.buy(new Tv());
b.buy(new Computer());
b.buy(new Tv());
b.buy(new Audio());
b.buy(new Computer());
b.buy(new Computer());
b.buy(new Computer());
b.summary();
}
}
class Buyer {
int money = 1000;
Product[] cart = new Product[3]; // 구입한 제품을 저장하기 위한 배열
int i = 0; // Product배열 cart에 사용될 index
void buy(Product p) {
/*
*
* (1) 아래의 로직에 맞게 코드를 작성하시오 .
* 1.1 가진 돈과 물건의 가격을 비교해서 가진 돈이 적으면 메서드를 종료한다.
* 1.2 가진 돈이 충분하면, 제품의 가격을 가진 돈에서 빼고
* 1.3 장바구니에 구입한 물건을 담는다.(add 메서드 호출 )
*
*/
}
void add(Product p) {
/*
*
* 1.1 i의 값이 장바구니의 크기보다 같거나 크면
* 1.1.1 기존의 장바구니보다 2배 큰 새로운 배열을 생성한다.
* 1.1.2 기존의 장바구니의 내용을 새로운 배열에 복사한다.
* 1.1.3 새로운 장바구니와 기존의 장바구니를 바꾼다.
* 1.2 물건을 장바구니(cart)에 저장한다. 그리고 i의 값을 1 증가시킨다.
*
*/
} // add(Product p)
void summary() {
/*
*
* 1.1 장바구니에 담긴 물건들의 목록을 만들어 출력한다 .
* 1.2 장바구니에 담긴 물건들의 가격을 모두 더해서 출력한다.
* 1.3 물건을 사고 남은 금액 를 출력한다(money).
*
*/
} // summary()
}
class Product {
int price; // 제품의 가격
Product(int price) {
this.price = price;
}
}
class Tv extends Product {
Tv() {
super(100);
}
public String toString() {
return "Tv";
}
}
class Computer extends Product {
Computer() {
super(200);
}
public String toString() {
return "Computer";
}
}
class Audio extends Product {
Audio() {
super(50);
}
public String toString() {
return "Audio";
}
}
//[실행결과]
//
//잔액이 부족하여 Computer을/를 살 수 없습니다.
//구입한 물건 : Tv, Computer, Tv, Audio, Computer, Computer,
//
//사용한 금액 : 850
//남은 금액 : 150
//```
//
//### 풀이
//
//```
package java_0929;
public class Test {
public static void main(String args[]) {
Buyer b = new Buyer();
b.buy(new Tv());
b.buy(new Computer());
b.buy(new Tv());
b.buy(new Audio());
b.buy(new Computer());
b.buy(new Computer());
b.buy(new Computer());
b.summary();
}
}
class Buyer {
private int money = 1000;
Product[] cart; // 구입한 제품을 저장하기 위한 배열
private int cartSize = 3;
private int i = 0; // Product배열 cart에 사용될 index
Buyer() {
cart = new Product[3];
}
void buy(Product p) {
if (p.getPrice() <= money) {
add(p);
i++;
money -= p.getPrice();
} else
System.out.println("잔액이 부족하여 " + p + "을/를 살 수 없습니다.");
}
void add(Product p) {
if (cartSize <= i) {
Product[] tmpCart = new Product[cartSize * 2];
cartSize *= 2;
for (int j = 0; j < i; j++) {
tmpCart[j] = cart[j];
}
cart = tmpCart;
}
cart[i] = p;
} // add(Product p)
void summary() {
int total = 0;
for (int j = 0; j < i; j++) {
System.out.print(cart[j] + ", ");
total += cart[j].getPrice();
}
System.out.println();
System.out.println("사용한 금액: " + total + "남은 금액: " + money);
} // summary()
}
class Product {
private int price; // 제품의 가격
Product(int price) {
this.price = price;
}
public int getPrice() {
return price;
}
}
class Tv extends Product {
Tv() {
super(100);
}
public String toString() {
return "Tv";
}
}
class Computer extends Product {
Computer() {
super(200);
}
public String toString() {
return "Computer";
}
}
class Audio extends Product {
Audio() {
super(50);
}
public String toString() {
return "Audio";
}
}