JAVA

자바- 조건문과 반복문

bysnow 2021. 3. 13. 13:46
728x90
반응형
SMALL

오늘은 조건문과 반복문을 공부했다. 융복합소프트웨어학과를 이중전공하여 기본적인 문법들은 익숙했지만 그에 대한 개념의 기초가 부실하다고 느껴왔기 때문에 오늘 수업에서 많은 것을 배우고 이해할 수 있었다.

1. 조건문

조건문은 코드의 실행 흐름을 제어한다. 코드는 기본적으로 위에서 아래로, 차례대로 진행되지만 조건문은 이 흐름을 제어할 수 있다. 조건문에는 if문과 switch문이 있다.

2. 반복문 또한 코드의 실행 흐름을 제어한다. 반복문에는 for문, while문, 그리고 자주 쓰이지 않는 do while 문이 있다. 반복문을 제어하기 위해 break와 continue 등을 사용한다.

3. Scanner 사용

코딩 관련 학과를 다녔지만 사실 코딩을 많이 하지 않았다. 그나마 작년부터 코딩 테스트를 준비해보겠다고 알고리즘 공부를 조금씩 하였는데 이때는 파이썬을 사용했다. 따라서 자바에서 input을 받을때 사용하는 Scanner가 꽤 복잡하게 느껴졌다. 파이썬에서는 input()만 사용하면 해결됐는데...특히 sc.close()를 작성해주어야 한다는 것이 신기했다.

 

위의 코드는 이중for문을 사용하여 구구단을 출력하는 간단한 프로그램이다. 구구단 출력은 프로그래밍을 처음 배울때 질리도록 하는 실습이지만 사실 할 때마다 출력 부분에서 많이 헷갈린다...늘 두번째 for문 내에서 각 단 간의 구분을 지으려고 고민했는데 두번째 for문 밖에서 줄바꿈을 하면 그 문제를 매우 간단하게 해결할 수 있다는 것을 오늘 깨달았다.

 

위의 실습을 통해 continue 문과 continue를 제어할 수 있는 label의 사용법을 배웠다. 만일 AA라는 Label을 사용하지 않고 그대로 continue를 한다면 i가 3인 경우만 무시하고 4인 경우부터 다시 출력이 진행될 것이다. 그러나 continue문과 함께 AA라는 Label을 첫 for문에 부여하는 것을 통해 i가 3인 경우 아예 두번째 for문 내에서 출력을 중단하고 다음 j로 넘어가도록 할 수 있다.

위의 실습은 main 함수에서 입력받은 년도와 월의 말일을 출력하는 메소드이다. 이 실습을 진행하며 조건문 작성 시 조건문에서 사용할 변수의 초기값을 어떻게 설정하느냐에 따라 코드의 효율성이 크게 향상될 수 있다는 사실을 배웠다. 처음에 스스로 코드를 작성할 때 아무 생각 없이 lastDay변수를 0으로 선언하였다.

이런 경우,

if (month == 2) {

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

lastDay = 29;

} else {

lastDay = 28;

}

} else if (month == 4 || month == 6 || month == 9 || month == 11) {

lastDay = 30;

후에 else lastDay = 31;이라고 한줄을 더 작성해야만 모든 경우를 만족시킬 수 있다. 그러나 처음부터 lastDay를 31로 선언하면(말일이 31일인 달의 수가 제일 많으므로) 마지막 else문이 불필요하다. 이러한 개념은 코드의 복잡도가 증가할수록 중요할 것이라는 생각이 들었다.변수를 선언하고 초기화할때 생각하고 효율적으로 해야한다.

 

위의 코드는 주어진 수만큼의 줄에 직각 역삼각형을 출력하는 문제이다. 즉 num으로 10이 주어진다면 첫줄에는 10개의 별이, 그 다음부터는 하나씩 줄어들며 별이 하나가 될 때까지 출력되는 것이다. 이 실습을 진행하며 나의 아주 안좋은 습관 두 가지를 발견했는데, 그것은 출력을 무조건 두번째 for문 내에서 해결하려고 하는 것과 두번째 for문에서 사용할 적절한 조건(여기서는 int col=num+1-row 이었지만 때에 따라서는 가운데 범위에 대한 조건)을 찾는것을 게을리한다는 것이다. 코딩을 할 때 무작정 키보드를 두드리기보단 펜을 들고, 혹은 메모장을 켜고 어떻게 문제를 해결하는 것이 합리적일지를 생각하는 습관이 필요하다.

배운것들 : static은 static이 아닌 것을 부를 수 없다. for 문 두개 돌려서 도형 만들 때 줄바꾸기 넣는 것 기억하기, 두번째 for문 조건 생각하고 넣기, 이중 for문에서 continue 사용시 label 잘 붙이기

반복문이 아닌 함수 내의 조건문에서 프로그램을 종료하고자 하면 return사용하기(return은 main으로 돌아간다. 함수에서 빠져나갈때 사용한다.) 간단한 조건문에서는 if문 외에도 삼항연산자를 사용할 수 있다.

위의 메소드는 입력받은 a와 b의 최대공약수를 출력한다. 여기서 처음에 나는 int num=a<b?a:b라는 삼항 연산자를 쓰는 대신 int tmp=0;을 선언하고 if문에서 만일 a가 b보다 클 경우 tmp를 사용하여 a와 b를 바꾸는 과정을 약 5줄에 걸쳐 코드로 작성했다. 또 for문을 거꾸로, 즉 num에서 시작하여 작은 수로 진행하는게 아닌 1부터 num까지 진행하면서 공약수가 등장할 때마다 ans값을 갱신하는 코드를 생각하느라 막혀있었다. 그런데 강사님께서 최대값을 찾는 경우 큰 값부터 for문이 작동한다면 보다 간단하게 찾을 수 있다고 말씀해주셔서 훨씬 쉽게 문제를 해결하였다.

728x90
반응형
LIST

'JAVA' 카테고리의 다른 글

Java - If 문의 사용  (0) 2021.03.29
클래스와 메소드 예제 1  (0) 2021.03.18
DTO, Static, Singleton 그리고 접근 제한자  (0) 2021.03.17
자바로 숫자야구(Bulls and Cows)게임 만들기  (0) 2021.03.17
자바의 기초  (1) 2021.03.13