Notice
Recent Posts
Recent Comments
Link
SKSDUD
Clean 코드와 bad 코드 리뷰 - for문(1) 본문
1️⃣ 문제
두 개의 수를 입력받아 두 수를 포함해 두 수 사이의 수 중 2의 배수의 개수를 리턴해야 합니다.
num1과 num2는 0 이상의 정수
0은 홀수로 판별합니다.
🟧 Bad Code
수도코드
결과값을 저장할 count 변수
1. 둘 다 0인 경우
0을 리턴합니다. (0은 홀수이기 때문에)
2. 둘 중 하나가 0인 경우
만약 num1이 0이라면
만약 num2가 0이라면
3. 둘 다 0이 아닌 경우
두 수가 같은 경우
짝수로 같다면 count에 1을 저장합니다.
홀수로 같다면 count에 0을 저장합니다.
두 수가 다른 경우
num1이 더 큰 경우
num2가 더 큰 경우
결과 count를 반환합니다!
public int makeMultiplesOfDigit2(int num1, int num2) {
// 두 수 사이의 정수 중에서 2의 배수의 개수를 리턴합니다.
// 두 수를 포함한다. 0은 홀수로 판단한다.
int count=0;
// 둘 다 0인 경우
if(num1==0&&num2==0) count=0;
// 둘 중 하나가 0인 경우
if(num1 == 0 && num2 !=0){
for(int i=1;i<=num2;i++){
if(i%2==0){
count++;
}
}
}
else if(num1!=0&&num2==0){
for(int i=1;i<=num1;i++){
if(i%2==0){
count++;
}
}
}
// 모두 0이 아닌 경우
else if(num1 !=0 && num2 !=0){
if(num1==num2){
if(num1%2==0){
count++;
}
else count=0;
}
else if(num1>num2){
for(int i=num2;i<=num1;i++){
if(i%2==0){
count++;
}
}
}
else if(num1<num2){
for(int i=num1;i<=num2;i++){
if(i%2==0){
count++;
}
}
}
}
return count;
}
🟩 Clean Code
int count=0;
int start=num1;
int end=num2;
if(num1>num2){
start=num2;
end=num1;
}
if(start==0){
start=1;
}
for(int i=start;i<=end;i++){
if(i%2==0){
count++;
}
}
return count;
둘 다 0이 들어오는 경우
for(int i = 1 ; i <= 0 ; i++) { }
초기식 조건식 증감식
초기식을 시작으로 조건문을 검사했을 때 참이 아니므로
for문 밖 출력문을 바로 수행한다.
Character.getNumericValue(character)
char 형을 int 형으로 바꾸는 메서드
- start와 num변수를 이용하여 큰 값 작은 값을 특정하였다.
- 0은 홀수로 판별하기 위해 0인 경우 1로 만들어주어 % 계산을 용이하게 하였다.
bad코드로나마 어려워했던 반복문을 작성하여 돌아가게 한 것에 의의를 두겠다.
'프로그래밍 > 개발공부' 카테고리의 다른 글
[AWS] 헤매기(1) - IAM 사용자, S3 버킷, 기본 설정하기 (0) | 2023.06.26 |
---|---|
[소소한개념] float과 double의 차이는 무엇일까? (0) | 2023.06.25 |
형변환(Casting) 정리 (0) | 2023.02.08 |
[Java]Arrays.copyOf, Arrays.copyOfRange 배열 복사 (0) | 2023.02.04 |