if문과 if ~ else
public class Main1 {
public static void main(String[] args) {
int n1 = 5;
int n2 = 7;
if (n1 < n2){
System.out.println("n1 < n2 is true");
}
if (n1 == n2){
System.out.println("n1 == n2 is true");
} else {
System.out.println("n1 = n2 is false");
}
}
}
if 문의 골격
if ( true or false) {
조건 true 시 실행되는 영역
}
True가 오면 이어서 등장하는 중괄호 내부가 실행, false가 등장하면 이부분 생략
If else문 골격
if ( true or false) {
조건 true 시 실행되는 영역
} else {
조건 false시 실행되는 영역
}
경계를 생략
if (n1 < n2)
System.out.println("n1 < n2 is true");
if (n1 == n2)
System.out.println("n1 == n2 is true");
else
System.out.println("n1 = n2 is false");
경계를 구분하는 중괄호를 생략 할 수 있는 이유는 if 절과 else문이 속한 문장이 하나
If ~ else if ~ else문
public class Main2 {
public static void main(String[] args) {
int num = 120;
if (num < 0){
System.out.println("0 미만");
} else if (num < 100){
System.out.println("100 미만");
} else {
System.out.println("100이상");
}
}
}
if 문에서부터 조건을 검사하면서 내려온다. 조건이 true인 부분을 만나면 해당 부분에 속한 문장을 실행, 나머지는 건너 뛴다. True를 만나지 못한다면 else에 속한 문장을 실행
if ~ else if ~ else = if ~ else문을 중첩 시킨 결과
<문제>
1.
public class Main3 {
public static void main(String[] args) {
int num = 120;
if (num > 0 && num % 2 == 0) {
System.out.println("양수이면서 짝수");
}
}
}
if ~ else 문과 유사한 성격의 조건 연산자
public class Main4 {
public static void main(String[] args) {
int num1 = 50;
int num2 = 100;
int big;
int diff;
big = (num1 > num2) ? num1 : num2;
System.out.println("큰수:" + big);
diff =(num1 > num2) ? (num1 - num2) : (num2 - num1);
System.out.println("절대값 :" + diff);
}
}
조건 연산자는 피연산자가 3개
조건 ? 수1(true) : 수2(false)
기호 ?의 왼편이 true -> 왼편
기호 ?의 왼편이 false -> 오른쪽
<문제>
2.
public class Main5 {
public static void main(String[] args) {
int num1 = 50;
int num2 = 100;
int big, diff;
if (num1 > num2) {
big = num1;
} else {
big = num2;
}
System.out.println(big);
if (num1 > num2){
diff = num1 - num2;
} else {
diff = num2 - num1;
}
System.out.println(diff);
}
}
Switch와 break
switch문의 기본 구성
switch 문은 switch, case 그리고 default로 이루어 진다.
Switch (n){
Case 1 : n이 1이면 여기서부터 실행
Case 2 : n이 2면 실행
Default : 해당 case X면 여기서 실행
public class Main6 {
public static void main(String[] args) {
int n = 3;
switch (n){
case 1:
System.out.println("심플자바");
case 2:
System.out.println("퍼니자바");
case 3:
System.out.println("판타스틱 자바");
default:
System.out.println("최고 언어");
}
System.out.println("자바 좋아하니?");
}
}
실행할 위치가 결정되면 레이블의 의미는 없어진다. 즉, default를 포함하여 모든 레이블이 사라진 상태에서 실행
Switch문 들여쓰기
Case와 default는 레이블이다. 즉 들여쓰기 대상에서 제외
Switch문 + break 문
자바 키워드 중에 break가 있다.
Switch 문 밖으로 빠져나가겠습니다.
Switch (n){
Case 1 : n이 1이면 여기서부터 실행
Break;
Case 2 : n이 2면 실행
Break;
Default : 해당 case X면 여기서 실행
}
레이블 별로 영역을 형성하여 해당 영역만 실행 & break문 만났을 때 해당 영역을 빠져나감
public class Main7 {
public static void main(String[] args) {
int n = 3;
switch (n) {
case 1:
System.out.println("simple Java");
break;
case 2:
System.out.println("Funny Java");
break;
case 3:
System.out.println("Fantastic Java");
break;
default:
System.out.println("The Best Programming language");
}
System.out.println("Do u like Java");
}
}
}
case 1,2,3인 경우에 실행 되는 영역이 같아짐
For, While & do~while
반복문 – while
public class Main10 {
public static void main(String[] args) {
int num = 0;
while (num < 5){
System.out.println("I like Java" + num);
num++;
}
}
}
while(n<5) 반복조건 {
반복영역
}
소괄호에는 반복 조건을 명시 -> true, false
True를 반환하는 동안 횟수에 상관없이 while문 중괄호 반복 실행
먼저 조건 검사
결과가 true 이면 중괄호 영역 실행
처음부터 false 이면 while문 중괄호 실행 안될 수도 있다. 하지만 true만 반환하도록 구성 된다면,
While 문을 벗어나지 못 할 수도 있다.
그리고 중괄호도 반복 실행할 문장이 하나라면 생략 가능
Do ~ While 문
Do ~ While 문 다음의 페턴으로 반복할 진행함을 실행
중괄호 영역 우선 실행
조건 검사 후 결과가 true이면 반복 결정
While 문은 선 검사, do While 문은 후 검사
public class Main11 {
public static void main(String[] args) {
int num = 0;
do {
System.out.println("I like java" + num);
num ++;
} while (num<5);
}
}
do {
반복 영역
} while(조건)
조건에 따른 반복이 필요하다. 그렇다면 한번은 무조건 실행
<문제>
1.
public class Main12 {
public static void main(String[] args) {
int num = 1;
int result = 0;
while (num < 100) {
result += num;
num ++;
}
System.out.println(num);
}
}
2.
public class Main13 {
public static void main(String[] args) {
int num = 1;
while (num < 100){
System.out.println(num + "");
num ++;
}
System.out.println(num);
do {
System.out.println(num + " ");
num--;
} while (num>1);
}
}
3.
public class Main14 {
public static void main(String[] args) {
int num = 1;
int answer = 0;
while (num <= 1000) {
if((num % 2 == 0) && (num % 7 == 0)){
System.out.print(num);
answer += num;
}
}
System.out.println(answer);
}
}
반복문 for
반복 횟수가 정해져 있는 상황에서는 for문을 이용해서 작성
for( int num = 0 ( 1 ); num <5 ( 2 ); num ++ ( 3 )){
System.out.println( num ); ( 4 )
}
Int num -> 반복 횟수를 세기 위한 변수
num < 5 -> 반복 조건
num++ -> 반복 조건을 무너뜨리기 위한 연산
public class Main15 {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
System.out.println("I Love Java" + i);
}
}
}
for 문의 실행 흐름
첫 번째 루프 흐름 ( i = 0)
1 -> 2 -> 3 -> 4
두번쨰 루프 흐름 ( i = 1 )
2 -> 3 -> 4
3번째 루프 ( i = 2 )
2 -> 3 -> 4
4번째 루프 ( i = 3 )
2 -> 3 -> 4
첫 번째 실행이 완료되기 까지의 과정
1. 변수 선언 및 초기화
2. 반복 조건이 true 인지 확인
3. 반복 영역을 실행
4. 변수의 값 증가
두 번째 이후의 실행 과정
1. 반복 조건이 true
2. 반복 영역을 실행 (반복 조건이 true이면)
3. 변수 값 증가
이러다 false가 되면 반복문 빠져 나온다.
<문제>
1.
public class Main16 {
public static void main(String[] args) {
int num = 1;
for (int i = 1; i <11 ; i++) {
num *= i;
System.out.println(num);
}
}
}
public class Main17 {
public static void main(String[] args) {
int a = 5;
int b = 1;
for (b = 1; b <10 ; b++) {
System.out.println(a * b);
}
}
}
Break & Continue
break문
반복문을 빠져나가는 용도로 사용
public class Main20 {
public static void main(String[] args) {
int num = 1;
while (true) {
if (num % 6 == 0 && num % 14 == 0)
break;
num++;
}
System.out.println(num);
}
}
break문이 실행되면 반복문 하나 빠져나간다. (가장 근접한 반복문을 찾아 하나 빠져나간다)
Continue 문
실행하던 반복문의 나머지 부분을 생략하고, 프로그램의 흐름을 조건 검사 부분으로 이동
Continue 문을 만나면, 반복문의 나머지 부분을 실행하지 않고, 반복문의 맨 위로 이동하여 조건 검사부터 실행을 이어나간다.
public class Main21 {
public static void main(String[] args) {
int num = 0;
int cnt = 0;
for (num = 1; num <= 100; num++) {
if (num % 7 == 0 && num % 5 == 0) {
System.out.print(num + " ");
cnt++;
} else {
continue;
}
System.out.println(cnt);
}
}
}
무한 루프와 Break
반복의 조건이 true로 명시되어 해당 반복문을 빠져나가지 못하도록 구성한 반복문 -> 무한 루프
int num = 1;
while (true){
if ((num % 6) == 0 && (num % 14) == 0)
break;
num ++;
}
System.out.println(num);
}
값의 범위를 설정 하지 않았기에 무한 루프 형성
<문제>
1.
public class Main21 {
public static void main(String[] args) {
int num = 0;
int cnt = 0;
for (num = 1; num <= 100; num++) {
if (num % 7 == 0 && num % 5 == 0) {
System.out.print(num + " ");
cnt++;
} else {
continue;
}
System.out.println(cnt);
}
}
}
public class Main22 {
public static void main(String[] args) {
int n = 1;
int cnt = 0;
while (n < 1000) {
if (n % 2 == 0) {
n++;
} else {
cnt += n;
n++;
}
}
System.out.println(n - 1);
System.out.println(cnt);
}
}
반복문 중첩
For문 안에 if문을 삽입하는 경우 & for문 안에 while 문도, do ~ while문도 그리고 for 문도 삽입
1. For 문의 중첩
2. public class Main23 {
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
System.out.println();
for (int j = 0; j <3; j++) {
System.out.print(i + j);
}
System.out.println('\n');
}
}
}
첫 for 문은 -> 바깥쪽 for문 / 두번째 for문은 안쪽 for 문
구구단 출력
public class Main24 {
public static void main(String[] args) {
for (int i = 2; i <10 ; i++) {
for (int j = 1; j <10 ; j++) {
System.out.println(i + "x" + "" + j + "=" + i*j);
}
}
}
}
While문 중첩
public class Main25 {
public static void main(String[] args) {
int i = 2;
int j;
while (i < 10) {
j = 1;
while (j < 10) {
System.out.println(i + "x" + "" + j + "=" + i * j);
j++;
}
i++;
}
}
}
for문 중첩을 우선으로 생각
중첩된 반복문을 한번에 빠져나오는 방법 -> 레이블을 설정하는 break
public class Main26 {
public static void main(String[] args) {
for (int i = 2; i < 10; i++) {
for (int j = 1; j < 10; j++) {
if (i j == 72){
System.out.println(i + "x" + "" + j + "=" + ij);
break;
}
}
}
}
}
이렇게 되면, 안쪽 for문은 탈출이지만, 바깥쪽 for문은 계속 돌아간다.
바깥쪽 for 문까지 빠져나오려면, outer 설정
public class Main27 {
public static void main(String[] args) {
outer :for (int i = 2; i < 10; i++) {
for (int j = 1; j < 10; j++) {
if (i j == 72){
System.out.println(i + "x" + "" + j + "=" + ij);
break outer;
}
}
}
}
}
<문제>
1.
public class Main28 {
public static void main(String[] args) {
for (int i = 2; i <9 ; i+=2) {
for (int j = 1; j <9 ; j++) {
if (i == 2 && j <=2){
System.out.println(i * j);
}
if (i == 4 && j <=4){
System.out.println(i * j);
}
if (i ==6 && j <=6){
System.out.println(i * j);
}
}
}
}
}