import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) {
// 임의의 컬렉션
int[] collection = {-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 효과적인 출력을 위해 버퍼드라이터를 사용 (System.out.println보다 속도가 빠름)
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 배열에 접근할 인덱스 선언
int i = 0;
// 인덱스가 컬렉션의 길이보다 작은 동안 반복함
while (i < collection.length) {
// 짝수인지 홀수인지를 알기 위해서는 마지막 1의 자리만이 필요함
int origin = collection[i];
int single = collection[i] % 10;
// 음수일 경우를 대비한 절대값 변환
if (single < 0) {
single = single * -1;
}
// 숫자가 짝수인지 홀수인지를 판별하는 것은 하나의 기능이므로 메소드를 분리하여 코드의 재사용성을 높임
// 또한 효율적인 메모리 사용을 위해 버퍼드라이터 객체를 파라미터로 넘김
// (새로운 객체가 생성되지 않고 재사용되므로 대단히 효율적)
printEvenNumber(origin, single, bw);
// 반복문의 다음 요소를 가져오기 위해 인덱스를 증가시킴
i = i + 1;
}
}
private static void printEvenNumber(int origin, int single, BufferedWriter bw) {
// 결과를 판별할 flag
boolean isEvenNumber = false;
// 짝수인지 홀수인지 비교할 숫자
int n = 0;
// 1의 자리를 구한 파라미터를 넘겨줬기 때문에 n은 항상 10보다 작음 (최대반복 횟수 10회)
while (n <= single) {
// 홀수와 짝수를 동전의 양면이라고 생각할때, 홀수와 짝수는 항상 번갈아 나오기 때문에 이를 번갈아 뒤집어 주면 효율적인 판별이 가능
isEvenNumber = !isEvenNumber;
// m이 n과 같아질떄까지 도달할때까지 반복해야 하므로 반복횟수를 1씩 올려줌
n = n + 1;
}
// 결과값을 출력할 변수 선언
String result = new String();
// 숫자와 문자를 더하면 숫자도 자동적으로 문자로 변환됨
result = origin + "은 ";
// 짝수인 경우
if (isEvenNumber == true) {
result = result + "짝수";
}
// 홀수인 경우
if (isEvenNumber == false) {
result = result + "홀수";
}
result = result + "입니다.";
// 버퍼드라이터는 에러가 발생할 수 있기 때문에 트라이 캐치문으로 감싸주어야 함
try {
// 버퍼에 결과값을 입력
bw.write(result);
// 버퍼에 입력된 값을 출력
bw.flush();
// 가독성을 위하여 줄바꿈
bw.newLine();
} catch (IOException e) {
// 만약 에러가 발생한다면 메모리 누수 방지를 위해 버퍼드라이터를 해제해 주어야 함
bw = null;
} finally {
// result는 더이상 사용되지 않으므로 효과적인 메모리 관리를 위하여 할당을 해재헤 주어야 함
// 또한 finally에 입력함으로써 에러가 발생할 경우에도 상관없이 해제가 가능
result = null;
}
}
}
import java.io.IOException;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) {
// 임의의 컬렉션
int[] collection = {-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 효과적인 출력을 위해 버퍼드라이터를 사용 (System.out.println보다 속도가 빠름)
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 배열에 접근할 인덱스 선언
int i = 0;
// 인덱스가 컬렉션의 길이보다 작은 동안 반복함
while (i < collection.length) {
// 짝수인지 홀수인지를 알기 위해서는 마지막 1의 자리만이 필요함
int origin = collection[i];
int single = collection[i] % 10;
// 음수일 경우를 대비한 절대값 변환
if (single < 0) {
single = single * -1;
}
// 숫자가 짝수인지 홀수인지를 판별하는 것은 하나의 기능이므로 메소드를 분리하여 코드의 재사용성을 높임
// 또한 효율적인 메모리 사용을 위해 버퍼드라이터 객체를 파라미터로 넘김
// (새로운 객체가 생성되지 않고 재사용되므로 대단히 효율적)
printEvenNumber(origin, single, bw);
// 반복문의 다음 요소를 가져오기 위해 인덱스를 증가시킴
i = i + 1;
}
}
private static void printEvenNumber(int origin, int single, BufferedWriter bw) {
// 결과를 판별할 flag
boolean isEvenNumber = false;
// 짝수인지 홀수인지 비교할 숫자
int n = 0;
// 1의 자리를 구한 파라미터를 넘겨줬기 때문에 n은 항상 10보다 작음 (최대반복 횟수 10회)
while (n <= single) {
// 홀수와 짝수를 동전의 양면이라고 생각할때, 홀수와 짝수는 항상 번갈아 나오기 때문에 이를 번갈아 뒤집어 주면 효율적인 판별이 가능
isEvenNumber = !isEvenNumber;
// m이 n과 같아질떄까지 도달할때까지 반복해야 하므로 반복횟수를 1씩 올려줌
n = n + 1;
}
// 결과값을 출력할 변수 선언
String result = new String();
// 숫자와 문자를 더하면 숫자도 자동적으로 문자로 변환됨
result = origin + "은 ";
// 짝수인 경우
if (isEvenNumber == true) {
result = result + "짝수";
}
// 홀수인 경우
if (isEvenNumber == false) {
result = result + "홀수";
}
result = result + "입니다.";
// 버퍼드라이터는 에러가 발생할 수 있기 때문에 트라이 캐치문으로 감싸주어야 함
try {
// 버퍼에 결과값을 입력
bw.write(result);
// 버퍼에 입력된 값을 출력
bw.flush();
// 가독성을 위하여 줄바꿈
bw.newLine();
} catch (IOException e) {
// 만약 에러가 발생한다면 메모리 누수 방지를 위해 버퍼드라이터를 해제해 주어야 함
bw = null;
} finally {
// result는 더이상 사용되지 않으므로 효과적인 메모리 관리를 위하여 할당을 해재헤 주어야 함
// 또한 finally에 입력함으로써 에러가 발생할 경우에도 상관없이 해제가 가능
result = null;
}
}
}
복잡한 로직과 알아보기 힘든 코드는 본질에서 벗어난거임
진정한 스파게티 코드는 쉽고 단순한 로직만을 사용함
이 코드는 제 경험을 바탕으로 실제 국비생이 짤법한 코드에 최대한 가깝게 만들었습니다
씨발 ㅋㅋㅋ
주석 도배된거봐 ㅋㅋㅋㅋㅋㅋ십 - dc App