갈림길 이정표

[4. 조건문과 반복문] 본문

Programming Language/Java 마스터하기(feat. 이것이 자바다)

[4. 조건문과 반복문]

이몽뇽 2020. 7. 19. 21:33

4.1 코드 실행 흐름 제어

4.2 조건문 (if 문, switch문)

 

package pack1;

import java.util.Scanner; //다른 패키지 가져올 때 import (C언어는 using)

public class Test4_if {
// alt + 위/아래
// ctrl + alt + 위/아래
	public static void main(String[] args) {
//		// 외부에서 값 얻기1
////		String[] : 문자열을 [여러개] 받을 꺼야
////		String arg1, String arg2, ... 하나씩 받을 꺼야 (0번째가 첫번째 데이터)
//		if(args.length == 0) {
//			System.out.println("외부에서 값 얻기 실패"); //거짓
////			System.exit(0); // 강제종료
//		}else {
//			System.out.println("args : " + args[0] + " " + args[1]);
//		}
//		
//		// 외부에서 값 얻기2 : 키보드
//		Scanner sc = new Scanner(System.in);
//		System.out.print("상품명 입력 : "); //ln은 커서 위치 다음줄
//		String irum = sc.next();
//		System.out.print("가격 입력 : "); //커서 위치 바로옆
//		int nai = sc.nextInt();
//		System.out.println(irum + "의 가격은 " + nai);
		
		//java.util 모델로.. -> 그러면 import 문 자동 삽입
		//하이브리드 웹 쓰면 웹을 모바일 버전으로
		
		// 조건 판단문 if
		int num = 2;
		
		if(num > 1) {
			System.out.println("크군요");
			System.out.println("자바만세");
			
		} //블럭화 시켜야 여러 명령 실행 가능 , 블럭 없으면 한 statement만 인식 실행 , 줄맞춤은 상관 없지만 python은 상관 있음
//if(true): 맨날 true , if(false) 맨날 false
//때문에 ()안에는 T,F를  구분할 수있는 논리 조건문 써야됨
		
		System.out.println();
		
		num = 5;
		if(num < 3) {
			System.out.println("작군요");
			System.out.println("참");		
		}else {
			System.out.println("작지 않아요");
		} // 한 문장 있을 때는 {}생략 가능하지만 if문에선 가능한 쓰는 게 좋음
		
		System.out.println();
		int jumsu = 67; // 변수 : 기억장소의 이름, 67 : 상수
		if(jumsu >= 70) {
			if(jumsu >= 90) {
				System.out.println("우수");
			}else {
				System.out.println("보통");
			}
		}else {
			if(jumsu >= 50) {
				System.out.println("저조");
			}else {
				System.out.println("엄청 저조");
			}
		}
		
		System.out.println();
		jumsu = 75;
		String re = "";
		if(jumsu >= 90) {
			re = "수";
		}else if(jumsu >= 80) {
			re = "우";
		}else if(jumsu >= 70) {
			re = "미";
		}else if(jumsu >= 60) {
			re = "양";
		}else { //마지막 조건이 너무 명확할 때 (jumsu < 60) 
			re = "가";
		}
		System.out.println("점수는 " + re);
		
		
		//문제: 키보드로부터 상품명, 수량, 단가를 각 각 입력받아 금액 (수량 * 단가)을 구하시오
		//조건: 금액이 5만원 이상이면 금액에 10%를, 그 외에는 금액에 5%를 세금으로 출력
		//출력 모양: 상품명:   금액:   세금:   
		
		System.out.println("---problem---");
		Scanner scan = new Scanner(System.in); //'Scanner' '이름' : '키보드입력데이터' '입력데이터집합명' 
			System.out.print("상품명 입력 : ");
			String sangpum = scan.next();
			System.out.print("수량 입력 : ");
			int suryang = scan.nextInt();
			System.out.print("단가 입력 : ");
			int dangga = scan.nextInt();
		
		int gumach = suryang * dangga;
		double saegum;
		if(gumach >= 50000) {
			saegum = gumach * 0.1;
		}else {
			saegum = gumach * 0.05;
		}
		System.out.println("---Answer---");
		System.out.println("상품명 : " + sangpum + "\n" + "금액 : " + gumach + "원\n" + "세금 : " + saegum + "원\n");
		
		System.out.println("프로그램 종료");
		
	}

}

package pack1;

import java.util.Scanner;

public class Test5_switch {

	public static void main(String[] args) { // 꼭 수기로 쓰는 연습하기!
		//switch (조건 판단문)
		int nai = 45;
		nai = nai / 10 * 10; // 10대 , 20대 표현
		System.out.println("nai : " + nai);
		
		switch(nai) {
		case 20:
			System.out.println("20대");
			System.out.println("청춘");
			break; //꼭 막아라 안 막으면 줄줄이 명령 수행
		case 30:
			System.out.println("30대");
			break; //안 적어도 되지만 습관적으로 막아라 (다른 언어에서는 막기때문)
		default: //이도 저도 아닌 것들 마치 else
			System.out.println("기타");
			break;
		}
		
		System.out.println();
		String jik = "과장";
		switch (jik) {
		case "대리":
			System.out.println("이하 대리");
			break;
		case "과장":
			System.out.println("와우 과장");
			break;
		}
		
		System.out.println();
//		double time = Math.random(); //난수
//		int time = (int)(Math.random() * 10);
		int time = (int)(Math.random() * 4) + 8; //0부터 시작하고 1씩 증가되는 랜던 숫자변수 4개 + 8
//		System.out.println(time);
		switch(time ) {
		case 8:
			System.out.println("출근하자");
			//break;
		case 9:
			System.out.println("회의하자");
			//break;
		case 10:
			System.out.println("program 짜자");
			//break;
		default:
			System.out.println("휴식");
		
		}
		
		System.out.println("\n해당 달의 날 수 출력--------");
		//키보드로 년, 월을 각 각 입력받아 해당 년 월의 날 수 출력, 단 윤년 체크.
		//윤년 = 해당 년이 4의 배수이고 100의 배수가 아니거나 400의 배수 (29일)
		
		//Scanner 수기로 쓸거면 꼭 import 도 수기로 쓰기!
		Scanner sc = new Scanner(System.in);
		System.out.print("년 입력 : ");
		int year = sc.nextInt();
		System.out.print("월 입력 : ");
		int month = sc.nextInt();
		
		if (month < 1 || month > 12) {
			System.out.println("월은 1~12 사이만 허용!");
			System.out.println("안녕!!!");
			System.exit(0); //입력 자료 오류 (예상 허용 범위를 벗어날 경우)
		}
		int day = 28;
		String msg = "평년";
		
		if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {//해석: 4의 배수 일 경우
			day = 29;
			msg = "윤년";
		}
		switch(month) {
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10: 
		case 12: // 반복되는 case 결과는 이렇게 case만 줄줄이 나열 후 결과 값
			day = 31;
			break; 
		case 4:
		case 6:
		case 9:
		case 11:
			day = 30;
			break;
		}
		System.out.println(year + "년 " + month + "월 " + day + "일" + " " + msg);
		
		System.out.println("----종료----");
	}


}

// if 와 switch 는 개발자 마음

4.3-1 반복문 (for문)

package pack1;

import java.util.Scanner;

public class Test6_for {

	public static void main(String[] args) {
		//반복문 for(초기치; 조건; 증가치){}
//		int a; //전역변수 (유지 보수가 힘듦)
//		for(int a = 1; a <= 5; a = a + 1)
		int a;
		int hap=0; //누적 기억장소: 초기화 권장
		for(a = 1; a <= 5; a = a + 1) { //마지막 세미클론(;) 쓰면 안돼
			//for문 내에서 유효한 변수 (지역변수) 최대한 지역변수 활용하자! 그래야 조립식 가능
			System.out.print(a + "\t"); // \t: tab간격 (이스케이프 코드)
			//해석: 초기치 만족시 해당 코드 실행
			//     증가치 후 조건 만족(참)시 해당 코드 실행 /아니면(거짓) exit
//			a = 3 이렇게 치면 무한 반복 -> '절대' 하지 마라
			hap += a;
		}
		//for문 : 반복 횟수가 명확할 때, 초기 변수값 결과가 계속 바뀜
		//참고로  a=a+1 와 a+=1, ++a, a++ 모두 같다 (증가량이 1보다 크면 다름) -> 자바와 C만 있는 기능
		System.out.println("\na:" + a);
		System.out.println("5까지의 합은" + hap);
		
		System.out.println("-------");
		for(int i = 65; i <= 90; i++) { //보통 for변수는 i로 쓴다
			System.out.print((char)i + "  "); // casting 강제 형변환
		}
		System.out.println();
		for(int i = 'A'; i <= 'Z'; i++) {
			System.out.print(i + " ");
		}
		System.out.println();
		for(int i = 10; i > 1; i -=2) { 
			System.out.print(i + " ");
		}
		
		System.out.print("\n(");
		for(int ytn=0, tv=5; ytn <= 5; ytn++, tv++) {
			System.out.print(ytn + " " + tv + " : ");
		}
		
		System.out.println(")\n");
		int aa = 1; //초기치를 밖깥에서 정하고 for을 써도 됨
		for(; aa <= 5; aa++) {
			if(aa == 2) {System.out.println("만세");
			System.out.print(aa + " ");
			}
		
		}
		
		System.out.println();
		
		System.out.println("\n다중 for -----------------");
		for(int m=1; m <= 3; m++) {
			System.out.println("m=" + m);
			for(int n=1; n<= 4; n++) {
				System.out.print("n:" + n +" ");
			}
			System.out.println();
		}
		
		System.out.println();
			for(char i = 65; i <= 90; i++) {
				System.out.print(i + " : ");
				for(char j = i; j <= 'Z'; j++) {
					System.out.print(j);
				}
			System.out.println();
			}
	
		
		System.out.println();
		//구구단 출력 (3단)
		for(int count = 1; count<10; count++) {
			System.out.println("3 * " + count + "=" + 3 * count);
		}
	
		//continue, break
		for(int i = 1; i <= 10; i++) {
			if(i == 3) continue; //건너뛰기 기능
//			if(i == 7) break; // for문 멈추고 탈출 
//			if(i == 5) return; // 메소드를 탈출 (∴따라서 ("프로그램 종료" 출력 실행 안함) 
			if(i == 5) System.exit(1);//exit는 프로그램 자체를 종료하는 것 (return ≠ exit) 1이나 0 쓰면 됨
			System.out.print(i + " ");
		}
	
		System.out.println();
		int kk = 0;
		for(;;) { // 이러면 무한루프
			kk++;
			System.out.println("출력 : " + kk);
			if(kk == 5) break; //하지만 멈추고 탈출 가능
		}
		
		System.out.println("\n프로그램 종료");
	}
}

4.3-2 반복문 (do-while문)

package pack1;

public class Test7_while {

	public static void main(String[] args) {
		// 반복문 while (조건){} ->조건이 참인 것만 수행
		int w = 1; // 초기치 먼저 설정
		while(w <= 5) {
			System.out.println("w: " + w); // 무한루프 (왜냐면 w=1 이니까)
			w++; //그래서 블럭화 시키고 증가치 설정 필수 [반복문 탈출(거짓이 되는 지점)을 위한 작업]
		}
		System.out.println("탈출 후w :" + w);
		
		//반복문은 while 보다는 for (2차원 배열지만 쓰기 때문)
		
		System.out.println();
		w = 0;
		while(true) { //while(true)는 무한 루프, while(false)는 말이 안됨
			w++;
			if(w == 2) continue;
			if(w == 5) break;
			System.out.println("w: " + w); 
			
		}
		
		System.out.println();
		//최소한번 실행 시켜주고 싶을 때 (선 명령 후 조건)
		w = 10;
		do {		//일단 실행해
			System.out.println("더블유: " + w);
			w++;
		}while(w <= 5);
	}

}

Comments