package javajungsuk4;

public class Ch04_1a4 {

	public static void main(String[] args) {
		// 4-1 ~ 4-4 조건문, if문, if-else문
		
		// 조건문 : 조건이 참이면 수행(0~1번 실행)
		// 반복문 : 조건을 만족하는 동안 수행(0~n번)
		// 조건문과 반복문은 실행흐름을 바꿀 수 있기때문에 '제어문'이라고도 한다. / flow control statement
		
		// if
		int a = 30;
		if (a < 100) {
			System.out.println("앙녕 if!"); // 조건이 거짓이라면 조건문을 실행하지 않고 다음 코드를 실행한다.
			System.out.println("a = " + a);
		}
		
		// 반복문
		// while (a++ > 0) {
		//	System.out.println("앙녕 while!"); // 조건이 거짓이라면 실행하지 않지만, 참이면 여러번 수행될 수 있다.
		// }

		// if-else
		if (a == 30) {
			System.out.println("if문은 참일 때 실행되고 거짓이라면 if는 뛰어넘고 else가 실행된다.");
		} else {
			System.out.println("else는 조건이 거짓일 때 실행된다.");
		}
	} // main의 끝

}

package javajungsuk4;

import java.util.Scanner;

public class Ch04_5a8 {

	public static void main(String[] args) {
		// 4-5 ~ 4-8 if-else if문, 중첩if문
		
		// 여러 개의 조건식 중 하나만 실행한다.
		
		int score = 0; // 점수를 저장하기 위한 변수
		char grade = 'D'; // 학접을 저장하기 위한 변, 공백으로 초기화
		
		System.out.println("점수를 입력하세요.>");
		
		Scanner scn =  new Scanner(System.in); // 화면으로부터 입력을 받겠다.
		score = scn.nextInt(); // 화면을 통해 입력받은 정수를 score에 저장하는 것
		
		if (score >= 90) {
			grade = 'A';
		}
		else if (score >= 80) {
			grade = 'B';
		}
		else if (score >= 70) {
			grade = 'C';
		}
		// else {
		//	grade = 'D'; // 코드를 줄이기 위해 else를 쓰지 않고, grade 기본값을 설정해줬다.
		// }
		System.out.println("당신의 학점은 " + grade + "입니다.");

		scn.close();
	}

}

package javajungsuk4;

import java.util.Scanner;

public class Ch04_9a11 {

	public static void main(String[] args) {
		// 4-9 ~ 4-11 switch문
		
		// 여러가지의 조건이 있을 때, if-else if문을 쓸 수 있지만 많을 때면 switch를 사용한다.
		// 조건식을 계산하고 조건식이 일치하는 case문으로 이동하여 수행한다.
		// break나 switch문을 만나면 전체를 빠져나간다.
		// 어느 곳도 일치하는 case문이 없다면 default로 이동한다. >> default문은 switch문의 마지막부분에 쓴다.
		// switch문에는 제약조건이 있다.
		
		// 제약조건 2가지
		// System.out.println("조건식의 결과는 정수나 문자열이어야 한다.");
		// System.out.println("case문의 값은 정수 상수(문자 포함), 문자열만 가능하다."); // 변수와 실수 X, 문자는 유니코드
		
		System.out.println("현재 월을 입력하세요. >");
		
		Scanner scn = new Scanner(System.in); // 화면으로부터 입력받기
		int month = scn.nextInt();
		
		switch(month){
		case 3 :
		case 4 :
		case 5 :
			System.out.println("현재의 계절은 봄입니다.");
			break;
		case 6 :
		case 7 :
		case 8 :
			System.out.println("현재의 계절은 여름입니다.");
			break;
		case 9 :
		case 10 :
		case 11 :
			System.out.println("현재의 계절은 가을입니다.");
			break;
		default : // case 12 : case 1 : case 2 :
			System.out.println("현재의 계절은 겨울입니다.");
		} // switch의 끝

		scn.close();

	} // main의 끝

}

package javajungsuk4_10;

public class Ch04_12 {

	public static void main(String[] args) {
		// 4-12 임의의 정수 만들기(실수도 가능)
		
		// Math.random() : 0.0과 0.1사이의 임의의 double값을 반환
		// 정수로 반환하고 싶다면 int형변환을 사용
		// 범위를 조정하려면 +1처럼 범위를 조정해줄 수 있다. - +
		// 곱하는 게 개별값 개수
		
		// int num = 0;
		
		for(int i = 1; i <= 20; i++) {
//			System.out.println(Math.random()); // 0.0(포함) ~ 1.0 사이
//			System.out.println(Math.random() * 10); // 0.0(포함) ~ 10.0 사이
//			System.out.println((int) (Math.random() * 10)); // 0(포함) ~ 10 사이의 정수 / 0 ~ 9까지 출력
			
		// 1. Quiz : 1~10까지의 난수를 20개 출력하시오.
			System.out.println((int) (Math.random() * 10) + 1); // 1 ~ 10까지 출력
			
		// 2. Quiz : -5 ~ 5 사이의 난수를 20개출력하시오.
			System.out.println((int) (Math.random() * 11) - 5); // -5 ~ 5까지 출력
		}
	} // main의 끝

}

package javajungsuk4_10;

public class Ch04_13a14 {

	public static void main(String[] args) {
		// 4-13, 4-14 for문
		
		// 조건식을 생략하면 true로 간주되어 무한반복문이 된다.
		// scope(범위) - 선언위치부터 선언된 블럭의 끝까지
		
		for(int i = 1; i <= 30; i++) {
			System.out.println("하이! for, while!"); // 블럭{}안의 문장을 30번 반복
			System.out.println(i);
		}
		
		for(int i = 1, j = 10; i <= 10; i++, j--) {
			System.out.println("i=" + i + "j=" + j); // 같은 타입일 경우에 변수 2개도 가능하다.
		}
		
//		int i;
//		for(i = 1; i <= 5; i++) {
//			System.out.println("Ang!");
//		}
//		
//		System.out.println("범위를 벗어나면 i라는 변수를 찾을 수 없어서 에러가 발생한다."); // scope : 범위
//		System.out.println("for의 블럭 밖에서 i를 사용해야한다면 변수를 밖에서 따로 선언해서 사용할 수 있다." + " i = " + i);
		
		int sum = 0; // 합계를 저장하기 위한 변수
		for(int i =1; i <= 5; i++) {
			sum += i; // sum = sum + i;
			System.out.printf("%2d%n", sum);
		}
	} // main의 끝

}

package javajungsuk4_10;

public class Ch04_15 {

	public static void main(String[] args) {
		// 4-15 중첩 for문
		
		// j값이 1번째 줄에 *이 하나, 2번째 줄에 *이 2개로 되는 것처럼 만들려면 i값이 증가함에 따라 j도 하나씩 증가해야하기 때문에 i <= j;로 바꾸면 된다.
		// 여러가지 *모양을 그려보는 연습을 해보는 것이 도움된다.
		
		for(int i = 2; i <= 9; i++) {
			for(int j = 1; j <= 9; j++) {
				System.out.println(i + " * " + j + " = " + (i*j)); // 괄호를 붙이는 것이 좋다.
			}
			System.out.println(); // 한 번의 수행이 끝날 때 마다 간격
		}
		
		for(int i = 1; i <= 5; i++) {
			for(int j = 1; j <= 10; j++) {
				System.out.print("*");
			} // System.out.println("**********");
			System.out.println(); // 줄바꿈
		}
	} // main의 끝

}

package javajungsuk4_10;

public class Ch04_16a19 {

	public static void main(String[] args) {
		// 4-16 ~ 4-19 while문, do-while문
		
		// for - 반복횟수를 알 때 / while - 반복횟수를 모를 때
		// while문은 반복횟수를 모를 때 쓰지만, for처럼 정해진 때도 쓸 수 있다.
		// while : 조건식이 참일 때 수행하고 거짓일 경우 멈춘다. / 처음부터 false라면 1번도 수행하지 않는다.
		// do-while : 최소 한 번 이상 반복한다. 사용자 입력받을 때 유용하다.
		// do-while에 끝에 ;을 잊지않도록 주의해야 한다.
		
		int i = 5;
		
		while(i!=0) {
			i--;
			System.out.println(i + " - 난 할 수 있앙~"); // i가 감소하고 4에서 1까지 반복하다가 i의 값이 0이 되면 0!=0 false라서 끝
		} // while의 끝
		
		int num = 12345, sum = 0;
		
//		System.out.println(12345%10); // 10으로 나머지 연산을 하면 마지막 자리를 얻는다.
		
		while(num > 0) {
			System.out.println(num%10);
			sum += num%10; // 나머지 값을 sum에 저장하여 누적
			num = num / 10; // 12345를 10으로 나눈 몫을 반복 : 12345 1234 123 12 1
		} // while의 끝
		
		System.out.println("각 자리수의 합" + sum); 
	} // main의 끝

}

package javajungsuk4_10;

import java.util.*;

public class Ch04_20a24 {

	public static void main(String[] args) {
		// 4-20 ~ 4-24 break문, continue문, 이름 붙은 반복문
		
		// break : 자신이 속한 하나의 반복문을 벗어난다.
		// while의 무한반복문 (true) / for의 무한반복문 (;true;), (;;)
		// continue : 자신이 포함된 반복문의 끝으로 이동(다음 반복으로 넘어감)
		// 이름 붙은 반복문 : 이름을 붙여서 하나 이상의 반복문을 벗어날 수 있다. / 자주 사용하지는 않는다. 있다는 것만 알아두자.
		
		int sum = 0;
		int i = 0;
		
		while(true) {
			if(sum > 100) {
				break;
			}
			i++;
			sum += i; // 조건을 만족하게 되면(sum이 100보다 큰 수까지 증가를 했다면) break가 수행되어 while을 빠져나온다.
		} // while의 끝
		System.out.println("i = " + i);
		System.out.println("sum = " + sum);
		
		for(int j = 0; j <= 10; j++) {
			if(j%2 == 0) {
				continue;
			}
			System.out.println(j);
		} // for의 끝
		
		int menu = 0;
		
		Scanner scn = new Scanner(System.in);
		
		while(true) {
			System.out.println("1. 사과");
			System.out.println("2. 귤");
			System.out.println("3. 포도");
			System.out.print("원하는 메뉴(1~3)를 선택하세요. (종료 : 0) > ");
		
		String tmp = scn.nextLine(); // 화면에서 입력받은 내용을 tmp에 저장
		menu = Integer.parseInt(tmp); // 입력받은 문자열(tmp)을 숫자로 변환
//		menu = Integer.parseInt(scn.nextLine()); 한줄로 가능하다.
		
		if(menu == 0) {
			System.out.println("종료합니다.");
			break;
		}
		else if(!(1 <= menu && menu <= 3)) {
			System.out.println("메뉴를 잘못 선택하셨습니다. 종료는 0.");
			continue;
		}
		
		System.out.println("선택하신 메뉴는 "+ menu + "번 입니다.");
		}// while의 끝

		scn.close();
	} // main의 끝

}