📚 TIL
자바 객체 지향 프로그래밍 과제
1. 메소드 오버로딩 실습 - 계좌 이체
어제는 이론을 위주로 공부했고 오늘은 실습을 위주로 하고 있다
코드를 열심히 지지고 볶아서 '객체 설계하기-계좌 이체' 문제를 해결했다
그러나 해답은 훨씬 더 간단한 것!
나는 4개의 문제에 대한 메소드를 일일히 만들었는데
하나의 메소드만 만들고 3개는 메소드를 호출해서 만들 수 있었다.
문제다풀고보니 이 과제가 메소드 오버로딩 실습 과제였다!!!
나는 boolean 클래스도 제대로 못썼다..
아래에 참고용으로 내가 작성한 코드와 해답으로 제시한 코드를 간단하게 정리해보았다
나의 코드
BankAccount.java
public boolean transfer(BankAccount to, int amount) {
if (amount < 0 || amount > getBalance()) {
System.out.println("false - from: " + owner.getName()
+ ", to: " + to.getOwner().getName()
+ ", amount: " + amount);
return false;
} else {
setBalance(getBalance() - amount);
to.setBalance(to.getBalance() + amount);
System.out.println("true - from: " + owner.getName()
+ ", to: " + to.getOwner().getName()
+ ", amount: " + amount);
return true;
}
}
Person.java (System.out.println 생략)
public boolean transfer(Person to, int amount) {
if (amount < 0 || amount > account.getBalance()) {
return false;
} else {
getAccount().setBalance(getAccount().getBalance() - amount);
to.getAccount().setBalance(to.getAccount().getBalance() + amount);
//아니 이게 무슨 뻘짓이람!! 그렇지만 이 부분 덕분에 객체 지향을 더 확실히 이해했다
return true;
}
}
답안 코드
BankAccount.java
public boolean transfer(BankAccount to, int amount) {
boolean success;
if (amount < 0 || amount > balance) {
success = false;
} else {
balance -= amount;
to.balance += amount;
success = true;
}
System.out.println(success + " - from: " + owner.getName()
+ ", to: " + to.owner.getName()
+ ", amount: " + amount);
return success;
}
Person.java
public boolean transfer(Person to, int amount) {
return account.transfer(to.getAccount(), amount);
}
2. 두 원소의 차 중 최댓값 구하기
나는 배열의 원소 하나하나의 크기를 비교하여
모든 원소보다 크거나 같은 원소는 가장 큰 숫자의 원소,
모든 원소보다 작거나 같은 원소는 가장 작은 숫자의 원소라 생각하여
배열 원소의 개수와 true가 나온 값의 같이 같은 원소가 답이다!하고 계산했는데
해답은 인덱스 0의 원소를 기본값으로 두고 배열 차례대로 원소들의 크기를 비교했다
이렇게 쉬운 방법이!! 코드 길이 차이 마음 아프다..
최댓값을 구하는 코드만 비교해보았다
나의 코드
int maxNum = 0;
int count = 0;
for (int i = 0; i < intArray.length; i++) {
count = 0;
for (int j = 0; j < intArray.length; j++) {
if (intArray[i] >= intArray[j]) {
count++;
}
}
if (count == (intArray.length)) {
maxNum = intArray[i];
}
}
답안 코드
int max = intArray[0];
for (int num : intArray) {
if (num > max) {
max = num;
}
}
3. 삼각형 그리기
이번엔 제대로 맞았다!! 해설 보면서 완전 뿌듯 ㅎㅎ
그런데 나는 왜 굳이 for문을 두 번 안쓰고 while문을 썼을까?
어쨌든 잘풀었다! 그래도 미래의 정교한 코딩을 위해 기록!
나의 코드
public void printTriangle(int height) {
for (int i = 1; i <= height; i++) {
int j = 1;
while (j <= i) {
System.out.print("* ");
j++;
}
System.out.println("");
}
}
답안 코드
public void printTriangle(int height) {
for (int i = 1; i <= height; i++) {
for (int j = 1; j <= 1; j++) {
System.out.print("* ");
}
System.out.println();
}
}
4. 피라미드 그리기
꾸역꾸역 풀어낸 피라미드 그리기
빈칸과 별 문자열과 빈칸과 별을 넣을 문자열을 따로 만들었어요
어머나 해답은 엄청 깔끔 내코드 완전 단순무식해보인다 ㅋㅋㅋ
나의 코드
public void printPyramid(int height) {
for (int i = 1; i <= height; i++) {
String blank = " ";
String blanks = "";
String star = "*";
String stars = "*";
int k = height - 1;
for (int j = 1; j < i; j++) {
stars = stars + star + star;
k--;
}
for (int l = 1; l <= k; l++) {
blanks += blank;
}
System.out.print(blanks + stars);
System.out.println();
}
}
답안 코드
public void printPyramid(int height) {
for (int i = 1; i <= height; i++) {
for (int j = 1; j <= height - 1; j++) {
System.out.print(" ");
}
for (int j = 1; j <= 2 * 1 - 1; j++) {
System.out.print("*");
}
System.out.println();
}
}
5. 플로이드의 삼각형
생각하면서 코드를 끼워넣었더니 비교적 쉽게 푼 문제!
숫자를 문자열로 바꾸는 과정이 필요했어요!
int num = 10;
String ten = Integer.toString(num)
나의 코드
public void printFloydsPyramid(int height) {
int k = 1;
String l = Integer.toString(height * (height + 1) / 2);
for (int i = 1; i <= height; i++) {
for (int j = 1; j <= i; j++, k++) {
for (int n = 1; n <= (l.length() - Integer.toString(k).length()); n++) {
System.out.print(" ");
}
System.out.print(k + " ");
}
System.out.println();
}
}
답안 코드
public void printFloydsPyramid(int height) {
int length = String.valueOf(height * (height + 1) / 2).length();
int number = 1;
for (int row = 1; row <= height; row++) {
String line = "";
for (int col = 1; col <= row; col++) {
for (int i = String.valueOf(number).length(); i < length; i++) {
line += " ";
}
line += (number + " ");
number++;
}
System.out.println(line);
}
}
😁 오늘 한 일
🎬 왓챠플레이 드라마보기
- 드디어 드라마 완결까지 다 봤어요! 끝까지 재밌었어요 ㅎㅎ
- 드라마 이름은 '와이 우먼 킬'이에요!! 막장드라마 너무 재밌다~~
- 시대는 다르지만 동일한 집에서 사는 세 여자에 관한 이야기예요!
🪑 스터디카페 가기
- 오늘은 친구랑 스터디카페에 갔어요!
- 새로 오픈한 곳이어서 이벤트 중이라 저렴한 가격으로 등록했어요!
- 여기는 집중존이랑 카페존이 나눠져 있어서 노트북을 쓸 수 있어서 좋더라고요! 자주 가야지~
📕 코드잇 공부하기
- 오늘은 문제를 푸니까 시간이 오래 걸리고 진도가 너무 안나갔어요ㅠ
- 그래도 문제를 해결해나가면서 코드에 익숙해지고 더 재밌어져요!
📺 펜트하우스 드라마 보기
- 오늘은 본방사수해서 펜트하우스를 봤어요! 오늘도 소름 ㄷㄷ
- 내일이 마지막화인데 기대돼요 죽고 죽이고 덜덜
- 요즘 이런게 삶의 낙인건가.. 밖에를 못나가니 이만한 액티비티가 없어요
🍁 메이플하기
- 완전 조금 해서 했다고 하기도 뭐하지만! 보스도 안잡고 몬파도 안했거든요..
- 새로운 소식이 있어요! 친구가 만든 길드에 가입했어요 ㅋㅋ
- 하지만 게임은 혼자.. 사람들한테 말못걸어..
'코딩 > TIL' 카테고리의 다른 글
TIL #210106 (0) | 2021.01.06 |
---|---|
TIL #210105 (0) | 2021.01.05 |
TIL #210103 (0) | 2021.01.03 |
TIL #210102 (0) | 2021.01.02 |
TIL #210101 (0) | 2021.01.01 |