취업 준비를 하며 복습한다는 마음으로, 이것을 보는 누군가에게 도움이 되었으면 하는 마음으로
Java-Tutoral을 작성해 봅니다. 입문서와 순서가 잘못되었을 수 있고, 제가 아는 정보가 틀렸을 수 있습니다.
이 글에 대한 잘못된 정보나, 오탈자 등 수정해야 할 항목 혹은 추가해야 할 항목은 댓글로 알려주시면 감사하겠습니다.
이 자료가 올라가는 저장소 :
https://github.com/hwk0911/Java-tutorial
개인적인 생각으로 제어문은 프로그래밍의 꽃이라 생각한다. (+ 포인터)
이번 포스팅은 Java의 제어문을 알아보려 한다.
Part 1, Part 2로 나누어 조건문, 반복문으로 진행하려 한다.
이번 포스팅부터는 진행 한 항목의 내용에 맞는 문제를 Beakjoon Online Judge(BOJ)에서 찾아 같이 포스팅하려 한다.
(문제 + 해설)
프로그래밍에서 많은 논리적 처리와, 개발자의 귀찮음을 줄여 준 아주 고마운 문법이다.
반복문은 크게 두 가지로 나뉘며, 각 각 두 개로 세분화하여 나눌 수 있다.
포 또는 포 루프로 불린다. 우선 구조부터 살펴보자.
for문법이 실행되고, 내부의 조건식에 의해 반복할지, 빠져나갈지 결정한다.
코드로 살펴보자.
public class Main {
public static void main(String[] args) {
for(int index = 0, size = 10 ; index < size ; ++index){
System.out.println(index);
}
}
}
/*
결과 :
0
1
2
3
4
5
6
7
8
9
Process finished with exit code 0
*/
아~주 아주 간단한 0부터 9까지 출력하는 반복문을 선언해봤다.
for문법의 기본 형태는 for(초기식 ; 조건식 ; 변화식) { 실행문 }이다.
위 코드의 for문 내부를 살펴보면 다음과 같다.
그렇다면 for문의 실행 순서를 알아보자.
for문은 가장 기본적인 반복문이라 할 수 있다.
그럼 for문의 파생인 for-each문법을 살펴보자.
for문과 비슷하게 생겼으나, 상황에 따라 훨씬 간단하게 표현할 수 있어 자주 사용된다.
배열이나 ArrayList 같은 리스트 형태를 검색할 때 아주 유용하다!
지금까지 와 마찬가지로 for each의 구조부터 살펴보자!
list의 사이즈가 1 이상일 때 작동하며, 다음 원소가 존재하지 않을 때 반복문을 빠져나온다.
코드로 살펴보자.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(3);
list.add(5);
list.add(7);
list.add(9);
list.add(11);
for(int var : list){
System.out.println(var);
}
}
}
/*
결과 :
1
3
5
7
9
11
Process finished with exit code 0
*/
for each의 단순 구조는 list의 원소를 가장 앞 인덱스부터 참조하여 var에 저장한 뒤, 내부 실행문을 실행한다.
코드의 작동 순서를 보면,
list 검사에 한해 정말 간단한 검사가 가능하다!
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(3);
list.add(5);
list.add(7);
list.add(9);
list.add(11);
list.forEach(var2 -> System.out.println(var2));
}
}
/*
결과 :
1
3
5
7
9
11
Process finished with exit code 0
*/
for each문 대신 함수형 forEach를 사용하여 출력한 결과다.
list의 원소를 처음부터 끝까지 var2에 대입하여 출력하는 방식이다.
코드도 훨씬 간소화되었고, 가독성도 좋다.
하지만 람다는 객체 지향 프로그래밍이 아닌 함수형 프로그래밍이다.
while은 for문에 비해 간단한 표현으로 루프를 실행할 수 있는 문법이다.
간단하긴 하지만, for문법 보다 확실한 예외처리를 통해 사용해야 한다.
while(true) or while(false)와 같은 사용을 최대한 지양해야 한다.
while의 구조를 살펴보자.
for문법과 동일한 구조를 갖는다.
하지만, 무한루프를 빠져나오기 위한 증 감식 같은 조건문의 상태를 바꿀 수 있는 실행문이 포함되어야 한다.
코드로 살펴보자.
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(3);
list.add(5);
list.add(7);
list.add(9);
list.add(11);
Iterator<Integer> itr = list.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
}
/*
결과 :
1
3
5
7
9
11
Process finished with exit code 0
*/
do-while문법이다. while의 다른 형태라 볼 수 있다. 가장 큰 특징은 우선 한 번은 무조건 실행한다는 점이다.
즉 조건의 검사를 실행문이 끝난 뒤 한다.
구조를 살펴보자.
내부 실행문이 먼저 실행된 뒤, 조건문을 확인하여 반복 여부를 결정한다.
코드를 살펴보자.
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(3);
list.add(5);
list.add(7);
list.add(9);
list.add(11);
Iterator<Integer> itr = list.iterator();
do{
System.out.println(itr.next());
}while(false);
}
}
/*
결과 :
1
Process finished with exit code 0
*/
위에서 while(false)와 같은 사용을 지양해야 한다 했지만, 극단적인 예시를 위해 사용하였다.
for, for-each, while과는 사용법이 많이 다르다.
무조건 한 번은 실행해야 하는 경우 사용하면 좋다.
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 128 MB | 83578 | 50591 | 44083 | 62.221% |
첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.
5
*
**
***
****
*****
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BOJ_for문_2438_별찍기1 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
String[] strStar = new String[N];
strStar[0] = "*";
for (int index = 1; index < N; ++index) {
strStar[index] = strStar[index - 1] + "*";
}
for (String str : strStar) {
System.out.println(str);
}
}
}
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 256 MB | 55850 | 20079 | 17357 | 37.759% |
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
각 테스트 케이스마다 A+B를 출력한다.
1 1
2 3
3 4
9 8
5 2
2
5
7
17
7
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BOJ_while문_10951_AsumB_4 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] strBuffer;
do{
strBuffer = br.readLine().split(" ");
System.out.println(Integer.parseInt(strBuffer[0]) + Integer.parseInt(strBuffer[1]));
}while(br.ready());
}
}
5. 상속 _ 물려 받아 사용하자 (0) | 2020.03.21 |
---|---|
4. 객체지향 프로그래밍의 시작 "클래스" (Java 클래스) (0) | 2020.02.26 |
3. 프로그래밍의 꽃 Java 제어문 Part 1 (조건문) (0) | 2020.02.19 |
2. 자료형 보다 기본! Java의 연산자 (0) | 2020.02.19 |
1.5 자료형의 범위는 왜 음수가 더 넓을까? (byte : -128 ~ 127) (0) | 2020.02.19 |