728x90
수업내용 정리 (Java)
1. 객체 비교
더보기
IntNumber num1 = new IntNumber(10);
IntNumber num2 = new IntNumber(10);
// == 연산자
if(num1 == num2) {
System.out.println("참조값 비교");
}else {
System.out.println("참조값이 다르다.");
}
- 객체의 주소값(참조값)을 비교하는 역할
// .equals 메소드
if(num1.equals(num2)) {
System.out.println("오버라이딩 전 참조값 비교, 오버라이딩 후 내용 비교");
}else {
System.out.println("오버라이딩 전 참조값/후 내용이 다르다");
}
- 객체를 비교할 때에는 오버라이딩하지 않는 이상 참조값을 비교하는 것이다.
- 원래 equals 메소드의 경우, Object 클래스의 메소드라서 == 연산자와 동일하게 주소값을 비교하도록 하는 메소드지만 String 타입에서는 내용 비교가 가능한 이유가 String 클래스에서 Object 메소드를 오버라이딩했기 때문이다.
@Override
public boolean equals(Object obj) {
IntNumber cmp = (IntNumber)obj;
if(this.num == cmp.num) {
return true;
}
return false;
}
- 오버라이딩을 통해 내용 비교로 바꿀 수 있다.
// 예제
package part1;
class Book{
private String title; //책제목
private String author; //작가
private int price;
public Book(String title, String author, int price) {
this.title = title;
this.author = author;
this.price = price;
}
@Override
public String toString() {
return " > title: "+title+"\t("+author+")";
}
@Override
public boolean equals(Object obj) {
Book book = (Book)obj;
if(this.title.equals(book.title)
&& this.author.equals(book.author)
&& this.price == book.price) {
return true;
}
return false;
}
@Override
public int hashCode() {
return price%5; //나머지 0~4(해시값)
}
}
public class Ex01 {
public static void main(String[] args) {
Book b1 = new Book("삼국지","홍길동",1000);
Book b2 = new Book("삼국지","홍길동",1200);
Book b3 = new Book("삼국지","이순신",1000);
System.out.println(b1 == b2); // 참조값 비교
System.out.println("참조값 주소\t"+System.identityHashCode(b1));
System.out.println("해시 값\t"+b1.hashCode());
if(b1.equals(b2)) {
System.out.println("b1과 b2는 동일 도서");
}else
System.out.println("b1과 b2는 비동일 도서");
if(b1.equals(b3)) {
System.out.println("b1과 b3는 동일 도서");
}else {
System.out.println("b1과 b3는 비동일 도서");
}
}
}
- hashCode(): 객체의 주소값을 변환하여 생성한 객체의 고유한 정수값 / 이 또한 오버라이딩해서 사용할 수 있다.
- .equals를 오버라이딩해서 객체의 title, author, price가 셋 다 맞아야 같은 책이라는 조건을 넣었다.
2. int / Integer
더보기
- int
- 변수 타입
- 자료형
- 산술 연산 가능
- null 값 지정 불가
- Integer
- 객체 타입
- 래퍼클래스
- Unboxing하지 않을 시 산술 연산 불가능 (지금은 자동으로 Boxing / Unboxing이 된다)
- null 값 지정 가능
public class Ex01 {
public static void main(String[] args) {
Integer iInst = new Integer(10);
Double dInst = new Double(3.14);
iInst = new Integer(iInst.intValue()+10);
System.out.println(iInst);
System.out.println(dInst);
}
}
- Integer iInst = new Integer(10); 이 코드를 작성하면 취소선과 함께 노란색 밑줄이 쳐지는데 이클립스가 개선되면서 이렇게 풀어쓰지 않아도 된다는 뜻이므로 프로그램은 정상적으로 돌아간다. (Integer iInst = 10;과 동일한 코드) 밑의 Double도 동일
- iInst = new Integer(iInst.intValue()+10); 이 코드를 작성해도 취소선과 함께 노란색 밑줄이 쳐진다. (iInst+=10;과 동일한 코드)
public class Ex02 {
public static void main(String[] args) {
Integer num1 = new Integer(10);
Integer num2 = 10;
if(num1 == num2) {
System.out.println("참조값 비교");
}else {
System.out.println("참조값 다름");
}
if(num1.equals(num2)) {
System.out.println("내용 비교");
}else {
System.out.println("내용 다름");
}
}
}
- 콘솔창: 참조값 다름, 내용 비교 출력
3. 소수점 절대값 내기 (BigDecimal)
더보기
import java.math.BigDecimal;
import java.util.Scanner;
public class Ex04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("5.5 입력> ");
BigDecimal num1=new BigDecimal(sc.next());
System.out.print("10.7 입력> ");
BigDecimal num2=new BigDecimal(sc.next());
System.out.println("절대값: "+num1.subtract(num2).abs());
}
}
- (아직 BigDecimal에 대해 잘 모르겠다.)
- BigDecimal은 자바 언어에서 숫자를 정밀하게 저장하고 표현할 수 있는 유일한 방법이다. (참고)
- .abs는 인자값에 대한 절대값을 반환해준다.
4. Random
더보기
Random rd = new Random();
- Random 함수를 사용하기 위해서는 import해야한다.
// 선생님이 예제로 보여주신 방법
for(int i=0; i<5; i++) {
System.out.print((int)(Math.random()*10)+" ");
}
// 기존에 내가 찾아뒀던 방법
for(int i=0; i<5; i++) {
System.out.print(rd.nextInt(10)+" ");
}
- (나는 내가 기존에 찾아뒀던 방법이 편하다고 생각한다.)
// 문제) 중복되지 않는 6개의 정수(1~14)를 배열에 저장 후 출력하시오
int[] a = new int[6];
for(int i=0; i<a.length; i++) {
a[i] = rd.nextInt(13)+1;
for(int j=0; j<i; j++) {
if(a[i] == a[j]) {
i--;
break;
}
}
}
Arrays.sort(a);
for(int i=0; i<a.length; i++) {
System.out.println(a[i]);
}
- 랜덤한 숫자를 중복되지 않게 6개 뽑아내고, 배열에 저장해 출력하기
- 첫번째 숫자(배열의 0번째 인덱스)를 뽑을 때는 그냥 뽑지만 두번째 숫자(배열의 1번째 인덱스)부터는 for문을 다시 돌려 i번째 인덱스와 j번째 인덱스가 같으면 i-1을 해주며 두번째 for문인 j for문을 종료하고 다시 큰 for문을 돌린다.
- 배열에 숫자를 모두 저장하고 나면 Arrays.sort 함수를 이용하여 배열 내 숫자들을 순서대로 정리해줬다.
- for문을 돌려 배열에 저장된 숫자들을 순서대로 출력했다.
질문한 내용이나 어려웠던 점 메모
1. BigDecimal
728x90
'프로그래밍 > 수업일지' 카테고리의 다른 글
수업일지 21일차 (23/10/19) - Java (0) | 2023.10.19 |
---|---|
수업일지 20일차 (23/10/18) - Java (0) | 2023.10.18 |
수업일지 18일차 (23/10/16) - Java (1) | 2023.10.16 |
수업일지 17일차 (23/10/13) - Java (0) | 2023.10.14 |
수업일지 16일차 (23/10/12) - Java (2) | 2023.10.12 |