목록코딩 (21)
MSM8994의 화룡점정 블로그
오늘은 Calendar 객체를 통해 오늘 날짜를 구한 뒤 clone() 으로 객체를 복제합니다. 그 복제한 Calendar 객체를 하루 앞당긴 다음 각 날짜 요소를 추출하여 문자열로 바꿔보고, SimpleDateFormat 을 통해서도 바꿔봅니다. 그리고 compareTo를 이용해 어느쪽이 앞인지를 비교하는 소스입니다. 두 날짜는 같은 형식으로 짜여져있어야 합니다. 월일년이나 일월년 처럼 큰게 뒤로 가버리는 경우 비교가 되지 않습니다. parseInt로 수로 변환해 사용하는 경우 자료형 범위 한계로 Long을 사용해야 합니다. // 오늘 날짜와 어제 날짜를 구해서 비교하기. // 오늘 날짜 Calendar today = Calendar.getInstance(); // 어제 날짜는 오늘의 -1일 Calen..
지난 글(보려면 클릭)에서 자바에서 어떤 멤버변수의 Getter 와 Setter를 만드는 방법을 알아봤습니다. 그런데 이건 그냥 프로그래머가 메소드를 만들어 쓰는 방식이라 단순 대입과는 다르게 코드 내에서 구별해내기 힘들지도 모르겠습니다. C#의 '속성'이런 기법을 언어 자체에서 지원하는게 있습니다 바로 C#입니다. 속성(property)라는 개념으로 지원되며 간단히 Getter와 Setter를 만들 수 있습니다. C#에서 속성은 첫글자를 대문자로 씁니다. public double Average { get; private set; } // 학생의 점수 평균학생의 점수 평균를 담는 속성을 만들었습니다. Setter가 private로 선언돼 다른 클래스가 이 값을 수정하려는 의도로부터 보호받고 있습니다. 그..
클래스에 소속될 멤버 변수를 선언하실 때 무심코 아래와 같이 만드는 경우가 있을 겁니다. public int score = -1; // 학생의 점수를 기억 (-1: 입력되지 않음) 그리고 접근할 때 아래처럼 하시겠죠. student[i].score = inputScore; // 가장 간단히 멤버 변수 값을 바꾸는 법 이렇게 하는 것이 가장 간단하기 때문일겁니다. 그러면 입력될 점수에 유효범위가 필요할 때는 어떻게 하면 좋을까요?if(0
2중 배열은 배열을 배열에 담은 것인 다중 배열이기에 각 배열끼리는 다른 객체가 되기 때문입니다.메모리에서 연속된 곳에 저장되어 있지 않는 것이지요.사람들이 2중배열을 2차원을 표현하는데 쓴다고 2차원 배열이라고도 하는데그렇게 생각해버리시면 [1][0]이 [0][8]의 다음 원소라거나 9번째 원소라고 생각하시게 될겁니다.그래서 저는 이걸 잘못 생각한다고 봅니다. C에서 쓰이는 malloc실행 - free실행 처럼 자바에서는 new실행 - null등 다른거 할당 을 통해 그 변수가 참조할 객체를 동적으로 생성하고 소멸시킬 수 있습니다.참조형 변수(레퍼런스 타입)는 객체 자체가 아니라 그 객체를 가리키는 주소가 그 변수에 들어있고 객체는 메모리 어딘가에 있다고 들어보셨을겁니다.2중배열도 같습니다. a라는 변..
여기서는 해당 수를 문자열로 변환해 3 6 9 인 문자 갯수대로 "짝"을 출력하거나 없는 경우 수를 출력하여 다음으로 넘어갑니다. cnt
최대 별 수와 현재 별 수, 그리고 증가/감소 여부만을 아는 변수를 이용하여 같은 반복문을 초기화, 조건, 증감식만 바꿔 작성하지는않은 별찍기1 코드입니다. int maxStars = 5;// 최대 별 수 int currentStars = 1;// 그려야할 별 수 boolean plusSW = true;// 별 수가 증가해야할지 감소해야할지 알게 하는 논리변수 while(currentStars > 0) { // 현재 별 수가 0 초과일 때 for(int colSpc = 1; colSpc
아래 코드는 2단부터 9단까지 단마다 9단까지 계산해 적으면서 한 줄에 4단씩 배치 int startDan = 2;// 시작 단 int endDan = 9;// 끝 단 int danPerLine = 4;// 한 줄에 출력할 단수. int maxGudan = 9;// 계산할 구단수 for (int dadan = startDan; dadan
안녕하세요. Math.round(실수)가 소수점 첫째 자리에서 반올림해 가까운 정수를 내놓는다는 것은 알고 계실 겁니다.5를 3으로 나누면 1.66666666666666666 .... 이 계산되어 나옵니다.이 수를 1.667로 반올림하려면 어떻게 하면 될까요? Math.round(result*1000)/1000. 매개변수에 10의 N제곱 만큼 곱해 소수점을 N번 뒤로 밀어 Math.round()로 반올림한 다음그 결과를 10의 N제곱 만큼 나누어 소수점을 N번 앞으로 당기면 됩니다. 1.66666666666666 에 10의 3제곱 1000을 곱해서1666.66666666666 로 만듭니다. 여기서 Math.round()를 실행시키면1667 로 반올림된 정수가 반환됩니다. 이 결과를 10의 3제곱 1000..
1부터 10까지 합과 홀수 합과 짝수 합을 식과 모두 표시하려면 그냥 합, 홀수 합, 짝수 합 이렇게 3개의 반복문을 써도 되겠지만 코드 분량이 늘어나게 되므로 여기서는 한 반복문으로 하도록 하겠습니다. 반복중 발생하는 내용을 바로 출력하는 콘솔출력만으로는 내용이 섞여 달성하기 힘드실 것입니다. 문자열 변수를 만들어 여기에 식을 적도록 하면 간단히 해결할 수 있습니다. ※1 String을 초기화하지 않으면 글자를 붙일 수 없고 null로 초기화하면 실행도중 오류가 발생하게 됩니다. 따라서 빈 문자열로 초기화했습니다. ※2 여기서 조건으로 나오는 메소드는 String 객체에 공통으로 있는 isEmpty() 인데요, null이 아닌 문자열 객체에 아무 글자도 들어있지 않는지를 (String.length() ..
!= 가 아니라 ≠라고? 코딩을 하다보면 ≠라는 글자를 어떻게 입력하지 라고 생각하시는 분들이 보입니다. 하지만 ㄷ 한자 9 로 저걸 입력한다면 실행도 못한 채 오류가 날 겁니다. 이 글자 왜 안되지? 이 현상은 어떤 글꼴을 사용할 때 여러 글자가 하나로 합쳐져서 다른 모양의 글자를 만들어내는 ligature(합자) 기능 때문에 일어납니다. https://en.wikipedia.org/wiki/Typographic_ligature원래 합자 기능은 글을 더 예쁘게 보이게 하려고 만들어진 기능입니다. D2Coding 도 1.3부터 이런 합자 기능이 지원되는 글꼴이 되어 !=나 >=, ->, =>, === 등에서 입력한 것과 다른 모양의 글자가 나타나게 되었습니다. https://github.com/naver..