자바 코드 해석 부탁드립니다.

자바를 배우고 있는데요.

각 달에 맞게 요일 수를 출력하는 코드를 보다가 모르는 게 있어서요.

case 2: 의 if문에서 year % 4 부터 무슨 말인지 잘 모르겠습니다.

29일이 4년마다 생겨서 if문으로 28일과 구별한 건 알겠는데... 어떻게 해석해야하죠?

15개의 답변이 있어요!

  • 안녕하세요.

    윤년의 조건이 3가지가 있습니다.

    1. 일단 4로 나누었을때 나누어 떨어지는 경우가 하나 입니다.

    2. 하지만 100년마다는 윤년이 아닙니다.

    3. 하지만 400년마다는 윤년입니다.

    이 3가지 조건이 그 식에 표현이 되어 있네요.

    예를 들어 2100년인 경우는 2번 조건에 걸려서 윤년이 아니지만 2000년은 3번 조건에 걸려서 윤년입니다.

  • > case 2: 의 if문에서 year % 4 부터 무슨 말인지 잘 모르겠습니다.

    > 29일이 4년마다 생겨서 if문으로 28일과 구별한 건 알겠는데... 어떻게 해석해야하죠?

    잘 해석하셨네요^^

    case 2: if (((year % 4 == 0) && !(year % 100 == 0)) || year % 400 == 0)) { days = 29; } else { days = 28; } break;

    해석이 어려우신 이유가, 윤년이라는 조건 자체가 어렵기 때문일 것 같습니다.

    if 문 그대로 해석해보면,

    '4로 나누어떨어지면서, 100으로는 나누어떨어지지 않는다. 또는 400으로 나누어떨어지면'

    이지요?

    윤년이 4년마다 오니까 4로 나누어떨어질 때마다, 대신에 100으로 나누어떨어지지 않아야 하니까 &&로 묶여 있는 것이고,

    애석하게도 400년은 100으로 나누어떨어지는데도 윤년이기에 || 로 OR 처리까지 하게 된 것입니다.

    윤년의 조건은 4년마다, 100으로 나누어떨어지지 않는 년도에, 하지만 400으로 나누어떨어지면 윤년. 입니다.

  • 안녕하세요.

    프로그래밍은 원래 혼자서 독학해야 하는 직종입니다. 대부분의 모르는 것들은 구글에 검색하면 다 나옵니다. 혼자서 독학하기에 좋은 프로그래밍 인강 사이트는 유료로 한다면 인프런 이라는 사이트가 있고 일단 맛보기라도 먼저 해보고 싶으시다면 생활코딩이라는 사이트를 접속하셔서 한 번 영상 훑어보시는 것도 좋습니다.

    시작하기 좋은 프로그래밍언어는 nodejs 혹은 javascript, python 등이 있습니다. 만약 앱개발을 원하신다면 무조건 자바를 하셔야 합니다. 안드로이드가 자바기반으로 되어 있으며 코틀린 언어를 사용하셔도 됩니다.

    현업에서는 C언어를 거의 사용하지 않습니다. 파이썬을 사용하는 부서는 있으며 주로 자바나 자바스크립트 nodejs 를 사용하는 부서가 가장 많습니다.

    그 외의 프로그래밍이라면 html, css, javascript 등과 같은 것은 https://w3schools.com 에서도 충분히 학습하실 수 있습니다.

  • Year%4==0 이란 4로 year를 나누었을때 나머지가 0이라는 뜻입니다.

    해석해보면 년도가 4로 나누어 떨어지면서 동시에 100으로는 안나누어떨어지는 년도이거나,

    혹은,

    년도값이 400으로 나누어 떨어지는 년도의 경우days변수를 29일로 할당하라라는 코드가 되겠네요.

    윤년의 정의를 생각해보면서 확인해보세요.

  • 안녕하세요,

    해당 if 문안에 있는 구문은 윤달을 계산하는 수식으로 보입니다.

    year % 4 의 의미는 year값을 4로 나누었을때 나머지 값을 말합니다.

    year%4 ==0 은 4로 나누었을 때 나머지 값이 0 인 경우를 뜻합니다.

    즉 2020년 2월은 29일까지 있죠?

    2020 / 4 했을 때 나머지 값이 0 인것을 보면 쉽게 이해하실 수 있을 것 같습니다.

  • Year %4 는 연도를 4로나눈 나머지를 의미합니다.

    % 연산자는 나머지를 반환합니다.

    즉 저 코드를 보면

    (4로나눈 나머지가 0이고, 100으로나눈 나머지가 0이거나)

    또는 400으로 나눈나머지가 0이면.

    29일까지 있고ㅎ 그외는 28일까지 있다는 코드네요

    연도를 대입학 각각 4, 100, 400으로 나누었을때 조건에 맞는 년도의 2월달 일자수를 보시면 규칙이 쉽게 이해되실거에요

  • 윤년 계산법입니다.

    1. 년도/4 해서 나누어 떨어지는 해인지 여부(나누어 떨어지면 일단 윤년 O)

    2. 1번에 해당하는 해 중에 년도/100이 또 나누어 떨어지면 윤년 x

    3. 2번에 해당하면서 년도/400이면 윤년 O

    year % 4 는 year를 4로 나눈 나머지 값이에요. 나머지 연산입니다.

    즉, year % 4과 0과 같다라는 것은 위 계산 법의 1번에 해당되죠.

    2020 % 4의 값은 뭘까요?

    정답은 0입니다.

    2021 % 4의 값은 뭐죠?

    정답은 1입니다.

  • java에서 %는 나머지를 구하는 연산자입니다.

    올해는 2021년 이니 나머지는 1이 되겠죠? (2021 % 4 = 1)

    즉, year % 4 는 4의 배수인지를 체크하는 로직입니다.

    그레고리력 달력 계산법에 의해 4년마다 한번 100년 단위는 제외, 400년은 포함이기 때문에

    년이 4의 배수인지, 100의 배수인지, 400의 배수인지 체크하여 윤년일 경우 2월에 29일로 표기되는 것입니다.

  • 안녕하세요.

    2월이 29일이 되는 윤년의 규칙을 적용한 것으로 아래 규칙을 구현한 것 입니다.

    연도를 4로 나누어 나머지가 0이되는 년도 && 100로 나누어 나머지가 0이되는 년도 && 400로 나누어 나머지가 0이되는 년도만 29일로 계산하는 로직입니다.

    참고

    https://ko.wikipedia.org/wiki/%EC%9C%A4%EB%85%84

    1. 서력 기원 연수가 4로 나누어 떨어지는 해는 윤년으로 한다. (1988년, 1992년, 1996년, 2004년, 2008년, 2012년, 2016년, 2020년, 2024년, 2028년, 2032년, 2036년, 2040년, 2044년 ...)

    2. 서력 기원 연수가 4, 100으로 나누어 떨어지는 해는 평년으로 한다. (1900년, 2100년, 2200년, 2300년, 2500년...)

    3. 서력 기원 연수가 4, 100, 400으로 나누어 떨어지는 해는 윤년으로 둔다. (2000년, 2400년...)

  • 윤년 및 평년 구하는 방법

    1. 윤년은 4년에 한번 발생 (year % 4 == 0)

    2. 1의 조건을 만족 하는 것 중, 100년 마다 평년 (year % 100 == 0)

    3. 2의 조건을 만족 하는 것 중, 400년 마다 윤년 (year % 400 == 0)

    year % 4는 year를 4로 나눈 나머지를 구하는 구문 입니다.

    즉 (year % 4 == 0)는 year를 4로 나눈 나머지가 0인 경우를 확인하는 조건이며(윤년는 4년마다 돌아옵니다.)

    (year % 100 == 0)은 year를 100으로 나눈 나머지가 0인 경우를 말합니다.

    다만 앞에 !가 있으므로 부정형으로 적용하여 year를 100으로 나눈 나머지가 0이 아닌 경우를 체크 합니다.

    if( ( (year % 4 == 0) && !(year % 100 == 0) ) || (year % 400 == 0)) { }

    즉 이 구분 자체를 해석하면

    year를 4로 나눈 나머지가 0 이면서 year를 100로 나눈 나머지가 0이 아닌 경우

    또는 year를 400로 나눈 나머지가 0인 경우를 만족할 경우에는 day를 29일로

    그렇지 않은 경우는 day를 28일로 한다는 내용 입니다.

  • year % 4는 year을 4로 나누었을때 나머지입니다. 예) 2000 % 4 = 0, 2001 % 4 = 1, 2003 % 4 = 3

    if(((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0 )

    ==> (year이 4의 배수이고 year이 100의 배수가 아닌경우) 또는 year이 400의 배수인 경우 참

  • 2월의 윤달(윤일) 계산을 하는 로직 같은데요.

    %(나머지 연산자)를 사용해서 if문이 구성이 되있네요.

    - 1번의 조건이 참이거나 2번의 조건이 참이거나 하면 2월을 29일로 보는 로직입니다.

    1. 년을 4로 나눈 나머지가 0 이고(4로 나누어 떨어질때) 년을 100으로 나눈 나머지가 0이 아닐때

    2. 년을 400 으로 나눈 나머지가 0일때(400으로 나누어 떨어질때)

    아래처럼 1번 과 2번중에 하나라도 참이면 조건이 성립합니다.

    (1번조건 참) || (2번조건 참)

  • 4의 배수 , 100의 배수, 400의 배수 라고 생각하면 됩니다. 아마 윤달 계산법에 대한 조건식이 써있는 예제를 보는 것 같은데.

    코딩이 아니라 달력 계산시에 4의 배수이면서 100의 배가 아닌 해 또는 400의 배수인 해는 29일이다 라는 조건식을 코드로 구현한겁니다.

    연도를 4로 나누었을때 나누어 떨어지는 해를 윤년

    그중에 100으로 나누어 떨어지는 해는 평년

    그러나 400으로 나누어 떨어지는 해는 다시 윤년으로 한다 라는 전제조건이 있을겁니다.

  • 안녕하세요.

    해당 로직은 윤년 계산식입니다. 윤년은 태양식이 정확히 하루가 아니기 때문에 적절한 시기에 하루를 끼워 맞추는 것입니다.

    윤년 계산은 아래 3개와 같은 뜻입니다.

    1) 4로 나누어 떨어지는 연도

    2) 4로 나누어 떨어지더라도 100으로 나누어 떨어지면 평년

    3) 100으로 나누어 떨어지더라도 400으로 나누어 떨어지면 윤년

    위의 식은 우선순위대로 아래식처럼 풀어서 사용할 수 있습니다.

    if (400으로 떨어지면) { // 윤년 } else if (100으로 떨어지면) { // 평년 } else if (4로 떨어지면) { // 윤년 } else { // 평년 }

  • 안녕하세요. A-HA 프로그래밍 전문가입니다.

    입력받은 year 변수를 4로 나눈 나머지를 의미합니다. 따라서 4의 배수이면서, 100의 배수는 아니거나 400의 배수인 경우 29일로 한다는 뜻입니다.

    질문하신것과 같이 윤달을 확인하기 위해 들어간 코드입니다. %는 나눈 나머지를 리턴합니다.