제어문(Control Statement)

woom·2022년 10월 26일
0

JAVA

목록 보기
4/18
post-thumbnail

🌼 제어문(Control Statement)

  • 프로그램의 흐름을 바꾸어 주는 구문

  • 선택문 (1. if, 2. switch : 사용하는 형태에 따라 나뉨)

  • 반복문 (3. for문, 4.중첩 for문, 5. while문)

  • 기타 (6. break, continue, return)

🌻 1. IF 문

  • 조건식에 의해 명령을 선택 실행
  • 형식1) : if (조건식) {명령; 명령; ...}
    • 조건식의 결과가 참인 경우 { } 안의 명령들을 실행
    • { } 안에 작성된 명령이 하나인 경우 { } 기호 생략 가능
  • 형식2) : if (조건식) {명령; 명령; ...} else {명령; 명령; ...}
    • 조건식의 결과가 참인 경우와 거짓인 경우를 구분하여 { } 안의 명령들을 실행
    • 조건식을 한번만 작성함으로써 유지보수효율성, 가독성 좋음
  • 형식3) : if (조건식) {명령; 명령; ...} else if (조건식) {명령; 명령; ...} else if(조건식) {명령; 명령; ...} ··· [else {명령; 명령; ...}]
    • 조건식이 여러 개인 경우 명령을 구분하여 실행 -else 생략 가능

🐣 예제

public class IfApp {
	public static void main(String[] args) {
    
    	//예제1
		//int su=90;
		int su=40;
		//변수값이 50 이상인 경우에만 화면에 변수값 출력
		/*
		if(su>=50) {System.out.println("su = "+su);}
		*/
		//{ } 안에 명령이 하나이므로 { } 기호 생략
		if(su>=50) System.out.println("su = "+su);
		
        
		//예제2
		//int score=80;
		int score=50;
		/*
		//변수값이 60 이상인 경우 합격 메세지를 출력하고 60 미만인 경우 불합격 메세지 출력
		if(score>=60) {System.out.println("[결과]점수가 60점 이상이므로 합격입니다.");}
		if(score<60) {System.out.println("[결과]점수가 60점 미만이므로 불합격입니다.");}
		*/

		//변수값이 60 이상인 경우 합격 메세지를 출력하고 아니라면 불합격 메세지 출력
		if(score>=60) {
			System.out.println("[결과]점수가 60점 이상이므로 합격입니다.");
		} else { System.out.println("[결과]점수가 60점 미만이므로 불합격입니다."); }
		
        
		//예제3
		//int num=9;
		int num=10;
		//변수값을 홀수 또는 짝수로 구분하여 출력 => X%Y==0 이면 X는 Y의 배수
		/*
		if(num%2!=0) {System.out.println(num+" >> 홀수");} 
		if(num%2==0) {System.out.println(num+" >> 짝수");}
		*/
		
		if(num%2!=0) {
			System.out.println(num+" >> 홀수");
		} else { System.out.println(num+" >> 짝수"); }
		
        
		//예제4
		//char mun='O';
		char mun='0';
		//문자변수에 저장된 문자값을 영문자와 비영문자로 구분하여 출력
		//  X>=작은값 && X<=큰값 : X는 작은값부터 큰값 사이의 범위안에 표현되는 값
		if(mun>='A' && mun<='Z' || mun>='a' && mun<='z') {
			System.out.println("[결과]"+mun+" >> 영문자");
		} else { System.out.println("[결과]"+mun+" >> 비영문자"); }
		
        
		//예제5
		//상태에 따라 결과 달라질때 bllolean 변수 사용 ex)마우스를 누른 상태에서 그리냐 아니냐
		//컴파일러는 번역하는것(실행하는것 X),조건이 컴파일 되기 전에는 참인지 거짓인지 알수없음
		//boolean sw=true;
		boolean sw=false;
		/*
		//조건식 대신 boolean 변수값을 이용하여 명령 선택 실행 가능
		if(sw) {System.out.println("현재 변수값은 [참]입니다.");} 
		else {System.out.println("현재 변수값은 [거짓]입니다.");}
		*/
		
		if(!sw) {System.out.println("현재 변수값은 [거짓]입니다.");}
		else {System.out.println("현재 변수값은 [참]입니다.");}
		
		
        //예제6
		int jumsu=85;
		//int jumsu=185;
		
		//변수값이 0~100 범위의 유효값인지 아닌지를 구분하여 출력 (입력값에 대한 유효성 검증)
		//if문 다섯개를 작성하는 것보다 else if문이 효율성, 가독성이 좋음
		if(jumsu>=0 && jumsu<=100) {
			//System.out.println("[결과] 0~100 범위의 정상적인 값이 입력 되었습니다.");
			//변수값으로 등급을 구분하여 출력 원할 시
			//100~90 : A, 89~80 : B, 79~70 : C, 69~60 : D, 59~0 : F
			String grade="";  //등급을 저장하기 위한 변수 (초기화 설정)
			/*
			if(jumsu<=100 && jumsu>=90) {grade="A";}
			 else if(jumsu<=89 && jumsu>=80) {grade="B";}
			 else if(jumsu<=79 && jumsu>=70) {grade="C";}
			 else if(jumsu<=69 && jumsu>=60) {grade="D";}
			 else if(jumsu<=59 && jumsu>=0) {grade="F";}
			*/
			if(jumsu>=90) {
				grade="A";
			} else if(jumsu>=80) {
				grade="B";
			} else if(jumsu>=70) {
				grade="C";
			} else if(jumsu>=60) {
				grade="D";
			} else {grade="F";}      //모든 조건식이 거짓인 경우 실행될 명령
			
			System.out.println("[결과]"+jumsu+"점 >> "+grade+"학점");
		} else { System.out.println("[에러]0~100 범위을 벗어난 비정상적인 값이 입력."); }
   
   
   
   

🌻 2. Switch 문

  • 값을 비교하여 명령 선택 실행 (실수값 비교 제외)

  • 메뉴 선택할때 사용하나 거의 사용하지 않음

  • 간단한 값에 대한 비교는 if문보다 가독성 좋으나 비교가 같아야 하기 때문에 선택의 폭 좁아

  • 형식) : switch (비교대상) {
    case 값1 : 명령; 명령; ... [break;] // :는 케이스값을 이용해서 위치를 표현하는 문자
    case 값2 : 명령; 명령; ... [break;]
    case 값3 : 명령; 명령; ... [break;]
    ···
    [ default : 명령; 명령; ...]}

  • 비교대상에는 변수 또는 연산식을 작성하여 비교하고자 하는 값을 제공

  • switch의 값을 case에 작성된 값과 비교하여 같은 경우 해당 위치로부터 작성된 모든 명령 실행

  • case의 값은 반드시 리터럴만 사용 가능하며 case의 값을 중복 선언하면 에러 발생

  • 모든 비교값이 다른 경우 default에 작성된 명령 실행 (생략 가능)

🐣 예제

public class SwitchApp {
	public static void main(String[] args) {
    
    	//예제1
		//int choice=1;
		int choice=2;
		//int choice=3;
		
		switch(choice) {
		case 1:System.out.println("수성으로 이동합니다.");
		case 2:System.out.println("금성으로 이동합니다.");		
		case 3:System.out.println("화성으로 이동합니다."); }
        //결과 : 금성으로 이동합니다. /n 화성으로 이동합니다.
		
        
		//예제2
		choice=4;
		//switch의 값과 case의 값이 모두 다른 경우 명령 미실행
		//switch의 값과 case의 값이 모두 다른 경우 default 입력 시 default 위치의 명령 실행
		switch(choice) {
		case 1:System.out.println("수성으로 이동합니다.");
		case 2:System.out.println("금성으로 이동합니다.");		
		case 3:System.out.println("화성으로 이동합니다."); 
		default: System.out.println("지구로 이동합니다."); }
		
        
		//예제3
		choice=1;
		switch(choice) {
		case 1:System.out.println("수성으로 이동합니다.");//break구문 만나면 switch 강제종료
		case 2:System.out.println("금성으로 이동합니다.");    break;	
		case 3:System.out.println("화성으로 이동합니다.");    break; }
		
        
		//예제4
		int jumsu=85;
		//변수값이 0~100 범위의 유효값인지 아닌지를 구분하여 출력 (입력값에 대한 유효성 검증)
		if(jumsu>=0 && jumsu<=100) {
			//System.out.println("[결과]0~100 범위의 정상적인 값이 입력 되었습니다.");
			//100~90 : A, 89~80 : B, 79~70 : C, 69~60 : D, 59~0 : F 
            //(변수값으로 등급을 구분하여 출력)
			String grade="";
			switch(jumsu/10) {
			case 10: 
			case 9: grade="A"; break;
			case 8: grade="B"; break;
			case 7: grade="C"; break;
			case 6: grade="D"; break;
			default: grade="F"; }
			System.out.println("[결과]"+jumsu+"점 >> "+grade+"학점");
		} else { System.out.println("[에러]0~100 범위을 벗어난 비정상적인 값이 입력."); }
		

		//예제5
		String kor="둘";
		String eng="";		
		switch (kor) {
		case "하나": eng="One";	break;
		case "둘": eng="Two";	break;
		case "셋": eng="Three";	break; }
		System.out.println("[결과]"+kor+" = "+eng);
        
   
   
   

🌻 3. For 문

  • 명령에 대한 반복 횟수가 정해져 있는 경우 사용되는 반복문 (Loop Statement)
    • ex) a창고에서 b창고로 10개 옮겨라(횟수정해져있음) vs 힘닿는데까지 옮겨라(횟수 정해지지 않음)
  • 형식) : for (초기식 ; 조건식 ; 증감식) { 명령; 명령; ... }
    • 1) 초기식 : 변수에 초기값을 저장하는 연산식, 2) 증감식 : 변수값을 증가 또는 감소시키는 연산식
    • 초기식, 조건식, 증감식은 반드시 ;를 이용하여 구분 ( ; 기호를 반드시 2번 사용해야 함 )
    • 초기식이 조건식에서 참일 경우 { } 안의 명령 실행 → 증감식을 통해 증감된 조건식이 참일 경우 { } 안의 명령 실행 → ···
    • 조건식의 결과가 거짓(false)인 경우 for 구문 종료
  • 주의) 조건식의 결과가 항상 참(true)인 경우 무한반복 (무한루프(Endless Loop))
    • 프로그램 강제 종료(Terminate) 필요
  • 초기식, 증감식은 , 기호 이용하여 나열 작성 가능
  • 초기식, 조건식, 증감식 생략 가능 (조건식이 생략된 경우 무조건 참으로 처리)
  • for 문에서 변수(ex.i)는 포 문에서만 적용되므로 포문이 종료된후 같은 변수 지정해도 상관 없음

🐣 예제1

public class ForApp {
	public static void main(String[] args) {
    
    	//예제1
		//"Java Programming"를 화면에 5번 출력 방법1
		for(int i=1;i<=5;i++){//i에1을 저장해서 5보다 작거나 같으면 실행 후 i에+1해서 반복 실행
			System.out.println("Java Programming"); }
	
		//"Java Programming"를 화면에 5번 출력 방법2
		for(int i=5;i>=1;i--) {
			System.out.println("Java Programming"); }
		
		//"Java Programming"를 화면에 5번 출력 방법3
		for(int i=2;i<=10;i+=2) {
			System.out.println("Java Programming"); }
		
        
		//예제2
		//"1     2     3     4     5" 출력
		for(int i=1;i<=5;i++) {
			System.out.print(i+"\t"); }
		System.out.println();    //엔터(Enter)만 출력

		//"5     4     3     2     1" 출력
		/*
		for(int i=1;i<=5;i++) {
			System.out.print((6-i)+"\t");}
		*/
		for(int i=5;i>=1;i--) {
			System.out.print(i+"\t"); }
		System.out.println();
		
		//"2     4     6     8     10" 출력
		/*
		for(int i=2;i<=10;i+=2) {
			System.out.print(i+"\t"); }
		*/
		for(int i=1;i<=10;i++) {
			if(i%2==0) {System.out.print(i+"\t"); }
		}
		System.out.println();
		

		//예제3
		//1~100 범위의 정수들의 합계를 계산하는 프로그램 => 1+2+3+...+98+99+100 = ? 
		int tot=0;  //정수들의 합계를 저장할 변수
		for(int i=1;i<=100;i++) {//tot=1+2+3+...+98+99+100
			tot+=i;
		}
		System.out.println("1~100 범위의 정수들의 합계 = "+tot);
        
        
        

🐣 예제2

  • 알고리즘(Algorithm) : 프로그램 작성시 발생되는 문제를 해결하기 위한 명령의 흐름

    • 치환 알고리즘(Swap Algorithm) : 변수값을 서로 바꾸어 저장하는 알고리즘
public class ForApp {
	public static void main(String[] args) {
		//두 변수에 저장된 정수값 범위의 합계를 계산하여 출력
		//int begin=20, end=80;
		int begin=80, end=20;
		/*
		//시작값이 종료값보다 큰 경우 에러메세지 출력 후 프로그램 강제 종료
		if(begin>end) {
			System.out.println("[에러]시작값이 종료값보다 작아야 됩니다.");
			System.exit(0);//프로그램을 강제로 종료하는 메소드 호출 }
		*/
		//시작값이 종료값보다 큰 경우 두 변수에 저장된 값을 서로 바꾸어 저장되도록 작성
		

		if(begin>end) {
			int temp=begin;
			begin=end;
			end=temp; }
		int sum=0;
		for(int i=begin;i<=end;i++) {
			sum+=i; }
		System.out.println(begin+"~"+end+" 범위의 정수들의 합계 = "+sum);
        
        
        
        

🐣 예제3

  • 초기식, 증감식은 , 기호 이용하여 나열 작성 가능
public class ForApp {
	public static void main(String[] args) {
		for(int i=1,j=5;i<=3;i++,j--) {
			System.out.println("i = "+i+", j = "+j); }
            //결과 : i=1,j=5/i=2,j=4/i=3,j=3
		

		int i=1; //for 구문에 상관없이 계속 존재
		//for 구문의 초기식,조건식,증감식 생략 가능
		for(;i<=4;i++) {//초기식 생략
			System.out.print(i+"\t"); }
        //결과 : 1	2	3	4	   
		//i=5;
		for(;i>=1;i--) {
			System.out.print(i+"\t"); }
		System.out.println();
		//결과 : 1	2	3	4	5	4	3	2	1
 
 
 

💡 주의

  • 조건식이 생략되면 무조건 참으로 처리되면서 무한루프 (종료되지 않는 반복문)

    • 프로그램 강제 종료(Terminate) 필요
		for(;;) {System.out.println("무한 반복되어 실행되는 명령"); }
  • 무한루프 하단에 작성된 명령은 실행되지 못하는 명령이므로 에러 발생
      

📌 Debug 기능

  • 프로그램 흐름 파악하기 위한 이클립스 기능 : Debug Perspective 사용
  • 방법 :
  1. 중지점(breakpoint) 설정
  2. [F11] : Debug 기능 실행 단축키 누르면 Debug Perspective로 변환됨
    • 왼쪽 창 : thread / 중간 : editor 창 / 오른쪽 창 : variable / 하단 : console 창
    • [F5] step into : 현재 클래스에서 다른 클래스까지 참조해서 프로그램 흐름 보여줘
  3. [F6] step over : 현재 클래스에서 명령을 하나씩 실행 (프로그램의 흐름 파악)
  4. 프로그램 강제 종료(Terminate : Ctrl+F2)
  5. Java Perspective 변환
  6. break point 제거
    • thread : 명령을 읽어서 실행하는 최소 단위로 break point를 통해 실행 중단 가능

📌 지역변수(Local Variable)

  • 블럭({ }) 내부에 선언된 변수

  • 선언된 블럭 내부에서만 사용 가능하며 지역변수가 선언된 블럭이 종료되면 지역변수 자동 소멸

🐣 예제

public class LocalVariableApp {
	public static void main(String[] args) {
		int num1=100;
		//임의블럭
		{
			int num2=200;
			System.out.println("========== 임의블럭 내부 ==========");	
			System.out.println("num1 = "+num1);
			System.out.println("num2 = "+num2);
		}
		System.out.println("========== 임의블럭 외부 ==========");	
		System.out.println("num1 = "+num1);
		//임의블럭 종료시 num2 변수가 자동 소멸되므로 사용 불가능
		//System.out.println("num2 = "+num2); }
   
   

🎀 연습문제1 - 조건문

public class IfExample {
	public static void main(String[] args) {
    
    	//예제1
		//변수에 저장된 문자값을 출력(변수에 저장된 문자값이 소문자인 경우 대문자로 변환하여 출력)
		char mun='x';

		if(mun>='a' && mun<='z') {      //변수값이 소문자인 경우
			mun-=32;                    //변수값을 대문자로 변환
		}
		System.out.println("mun = "+mun);
		


		//예제2
		//변수에 저장된 정수값이 4의 배수인지 아닌지를 구분하여 출력하세요.
		int num=345644;
		
		if(num%4==0) {                  //변수값이 4의 배수인 경우
			System.out.println("[결과]"+num+" >> 4의 배수가 맞습니다.");
		} else {
			System.out.println("[결과]"+num+" >> 4의 배수가 아닙니다.");
		}
		


		//예제3
		//올해가 평년인지 윤년인지를 구분하여 출력하세요.
		// => 년도를 4로 나누어 나머지가 0인 경우 윤년
		// => 위 조건을 만족하는 년도 중 100으로 나누어 나머지가 0인 경우 평년
		// => 위 조건을 만족하는 년도 중 400으로 나누어 나머지가 0인 경우 윤년
		int year=2022;
		if(year%4==0 && year%100!=0 || year%400==0) {
			System.out.println("[결과]"+year+"년은 윤년입니다.");
		} else {
			System.out.println("[결과]"+year+"년은 평년입니다.");
		}
		


		//예제4
		//이름이 [홍길동]인 학생이 국어점수 89점, 영어점수 93점, 수학점수 95점을 받은 경우
		//총점과 평균, 학점을 계산하여 이름, 총점, 평균, 학점을 출력하세요.
		// => 국어,영어,수학 점수 중 하나라도 0~100 범위가 아닌 경우 프로그램 강제 종료
		//    System.exit(0) : 프로그램을 강제로 종료하는 메소드
		// => 평균을 이용한 학점 계산 : 100~90:A, 89~80:B, 79~70:C, 69~60:D, 59~0:F
		// => 평균은 소숫점 두자리까지만 출력하고 나머지는 절삭 처리 하세요.
		String name="홍길동";
		int kor=189, eng=93, mat=195;
		
		//입력값 검증(Data Validation)
		/*
		if(kor<0 || kor>100 || eng<0 || eng>100 || mat<0 || mat>100) { 
       		 //비정상적인 입력값인 경우
			System.out.println("[에러]0~100 범위을 벗어난 비정상적인 점수");
			System.exit(0);
		}
		*/
		
		//검증 결과를 저장하기 위한 변수 - false : 검증 성공, true : 검증 실패
		boolean valid=false;
		
		if(kor<0 || kor>100) {
			System.out.println("[에러]0~100 범위을 벗어난 비정상적인 국어점수");
			//System.exit(0);
			valid=true;
		}
		
		if(eng<0 || eng>100) {
			System.out.println("[에러]0~100 범위을 벗어난 비정상적인 영어점수");
			//System.exit(0);
			valid=true;
		}
		
		if(mat<0 || mat>100) {
			System.out.println("[에러]0~100 범위을 벗어난 비정상적인 수학점수");
			//System.exit(0);
			valid=true;
		}		
		
		if(valid) { //입력값 검증이 실패된 경우 (적절한 값을 입력했을 경우)
			System.exit(0);
		}
		
		int tot=kor+eng+mat;
		double ave=tot/3.;
		String grade="";
		switch ((int)ave/10) {
		case 10:
		case 9: grade="A"; break;
		case 8: grade="B"; break;
		case 7: grade="C"; break;
		case 6: grade="D"; break;
		default: grade="F";
		}
		
		System.out.println("이름 = "+name+", 총점 = "+tot+", 평균 = "
        +(int)(ave*100)/100.+", 학점 = "+grade);	
        
        
        
        

🎀 연습문제2 - 반복문

public class ForExample {
	public static void main(String[] args) {
    
    	//예제1
		//본인 이름을 화면에 7번 출력하세요.
		//ex) 홍길동 홍길동 홍길동 홍길동 홍길동 홍길동 홍길동
		for(int i=1;i<=7;i++) {
			System.out.print("홍길동 ");
		}
		System.out.println();
		


		//예제2
		//1~10 범위의 정수 중 홀수를 화면에 출력하세요.
		//ex) 1     3     5     7     9
		/*
		for(int i=1;i<=10;i++) {
			if(i%2!=0) {
				System.out.print(i+"\t");
			}
		}
		*/
		for(int i=1;i<=10;i+=2) {
			System.out.print(i+"\t");
		}
		
		System.out.println();
		


		//예제3
		//1~100 범위의 정수에서 3의 배수들의 합계와 5의 배수들의 합계를 계산하여
		//3의 배수의 합계에서 5의 배수의 합계를 뺀 결과값을 출력하세요.
		//ex) 결과 = 633
		int tot3=0, tot5=0;
		for(int i=1;i<=100;i++) {
			if(i%3==0) tot3+=i;       //3의 배수의 합계 누적
			if(i%5==0) tot5+=i;       //5의 배수의 합계 누적
		}
		System.out.println("결과 = "+(tot3-tot5));
		


		//예제4
		//구구단 중 7단을 화면에 출력하세요.
		//ex) 7 * 1 = 7
		//    ...
		//    7 * 9 = 63
		int dan=7;
		for(int i=1;i<=9;i++) {
			System.out.println(dan+" * "+i+" = "+(dan*i));
		}
		


		//예제5
		//5!의 결과값을 출력하세요.(5! = 5 * 4 * 3 * 2 * 1)
		//ex) 5! = 120
		int num=5, fac=1;
		for(int i=num;i>=1;i--) {
			fac*=i;
		}
		System.out.println(num+"! = "+fac);
		


		//예제6
		//두 변수에 저장된 정수값 사이의 정수들을 화면에 출력하세요.
		//단, 한 줄에 정수값이 7개씩 출력되도록 프로그램을 작성하세요.
		//ex) 36    37    38     39     40     41     42
		//    43    44    45     46     47     48     49
		//    50    51    52     53     54     55     56
		//    57
		int begin=36, end=57;
		int count=0;                     //출력갯수를 저장할 변수
		
		for(int i=begin;i<=end;i++) {
			System.out.print(i+"\t");
			count++;
			if(count%7==0) {
				System.err.println();
			}
		}
		System.out.println();
   
   
   
   

🌻 4. 중첩 FOR 문

  • 행열(표) 데이터 처리 하기 위해 자주 사용

🐣 예제


public class MultiforApp {
	public static void main(String[] args) {
    
    	//예제1
		int cnt=0;//이동방법의 갯수를 저장하기 위한 변수
		
		for(int i=1;i<=3;i++) {//A나라 >> 섬 - 반복문
			for(int j=1;j<=4;j++) {//섬 >> B나라 - 반복문
				cnt++;}
		}
		System.out.println("이동방법의 갯수 = "+cnt);		//cnt=12
		


		//예제2
		//★★★★★★★ 
		//★★★★★★★
		//★★★★★★★
		//★★★★★★★
		for(int i=1;i<=4;i++) {                 //행(Row)을 처리하기 위한 반복문
			for(int j=1;j<=7;j++) {      //열(Column)을 처리하기 위한 반복문
				System.out.print("★");
			}
			System.out.println();}
            
		
        
		//예제3
		//2*1=2    3*1=3    ...    8*1=8    9*1=9
		//2*2=4    3*2=6    ...    8*2=16   9*2=18
		//...
		//2*8=16   3*8=24   ...    8*8=64   9*8=72
		//2*9=18   3*9=27   ...    8*9=72   9*9=81
		for(int i=1;i<=9;i++) {
			for(int j=2;j<=9;j++) {
				System.out.print(j+"*"+i+"="+(i*j)+"\t");
			}
			System.out.println();}
		
        
        
		//예제4
		//★          	i=1  별=1 
		//★★         	i=2  별=2
		//★★★      	i=3  별=3
		//★★★★     	i=4  별=4
		//★★★★★   	i=5  별=5
		for(int i=1;i<=5;i++) {
			for(int j=1;j<=i;j++) {
				System.out.print("★");
			}
			System.out.println();}
		

		//예제5-1
		//★★★★★ 		i=1  별=5
		//★★★★   	i=2  별=4
		//★★★    	 	i=3  별=3
		//★★      	 	i=4  별=2
		//★         	i=5  별=1 
		for(int i=1;i<=5;i++) {
			for(int j=1;j<=6-i;j++) {
				System.out.print("★");
			}
			System.out.println();}
		
		//예제5-2
		//★★★★★ 		i=5  별=5
		//★★★★   	i=4  별=4
		//★★★     	i=3  별=3
		//★★       	i=2  별=2
		//★         	i=1  별=1 
		for(int i=5;i>=1;i--) {
			for(int j=1;j<=i;j++) {
				System.out.print("★");
			}
			System.out.println();}
		


		//예제6-1
		//☆☆☆☆★  i=1  흰별=4  검은별=1    
		//☆☆☆★★  i=2  흰별=3  검은별=2
		//☆☆★★★  i=3  흰별=2  검은별=3
		//☆★★★★  i=4  흰별=1  검은별=4
		//★★★★★  i=5  흰별=0  검은별=5
		for(int i=1;i<=5;i++) {
			for(int j=1;j<=5-i;j++) {
				System.out.print("☆");}
			for(int j=1;j<=i;j++) {
				System.out.print("★");}
			System.out.println();}
		
        
		//예제6-1
		// 1 2 3 4 5 >> j
		//☆☆☆☆★  i=1    
		//☆☆☆★★  i=2
		//☆☆★★★  i=3
		//☆★★★★  i=4
		//★★★★★  i=5
		for(int i=1;i<=5;i++) {
			for(int j=1;j<=5;j++) {
				if(i+j<6) {
					System.out.print("☆");
				} else {
					System.out.print("★");
				}
			}
			System.out.println();}
            
            
            

🌻 5. WHILE 문

  • 명령에 대한 반복 횟수가 불확실한 경우 사용되는 반복문
  • 형식 ) while(조건식) {명령; 명령; ... }
  • 조건식의 결과가 참인 경우 블럭 안의 명령을 반복 실행하고 거짓인 경우 반복문 종료, 조건식 생략 불가능
  • 블럭 안의 명령을 0번 이상 반복 실행 (조건식의 결과가 처음부터 거짓인 경우 반복문 종료)
  • do while 문 : do {명령; 명령; ... } while (조건식);
    - 조건식의 결과가 처음부터 거짓인 경우에도 블럭 안의 명령을 1번 이상 반복 실행

🐣 예제

public class WhileApp {
	public static void main(String[] args) {
    
    	//예제1
		//"Java Programming"를 화면에 5번 출력
		int i=1;
		while(i<=5) {
			System.out.println("Java Programming");
			i++;}
	
   
   
		//예제2
		//1~100 범위의 정수들의 합계를 계산하여 출력
		int j=1, tot=0;
		do {
			tot+=j;
			j++;
		} while(j<=100);
		System.out.println("1~100 범위의 정수들의 합계 = "+tot);
		
        
        
		//예제3
		//A4 용지를 반으로 계속 접어 펼쳤을 경우 사각형 모양의 갯수가 500개 이상이 만들어지려면
		//몇번 접어야 되는지 계산하여 출력
		int cnt=0, gae=1;           //cnt : 접는 횟수, gae : 사각형 모양의 갯수
		while(gae<500) {            //A4 용지를 반으로 접는 행위를 반복 처리
			cnt++;               	//접는 횟수는 1씩 증가
			gae*=2;             	//사각형 모양의 갯수는 2배씩 증가
		}
		System.out.println(cnt+"번 접으면 "+gae+"개의 사각형이 만들어집니다.");
		
        
        
		//예제4
		//1~X 범위의 정수들의 합계가 300 이상이 만들어지려면 X가 얼마인지 계산하여 출력
		int x=0, sum=0;//x : 1씩 증가되는 정수값 저장, sum : 누적결과(합계) 저장
		while(sum<300) {
			x++;
			sum+=x;
		}
		System.out.println("1~"+x+" 범위의 정수들의 합계 = "+sum);
        




🌻 6. break

  • switch 구문 또는 반복문을 강제로 종료하기 위해 사용하는 제어문

🐣 예제

public class BreakApp {
	public static void main(String[] args) {
    
    	//예제1
		//기본적으로 반복문은 조건식이 거짓인 경우 종료
		for(int i=1;i<=5;i++) {
			if(i==3) break;       	 //if 구문의 조건이 참인 경우 break 명령으로 반복문 종료
			System.out.print(i+"\t");//1	2출력
		}
		System.out.println();
		

		//예제2
		for(int i=1;i<=5;i++) {
			for(int j=1;j<=5;j++) {
				if(j==3) break;                 //for(int j=1;j<=5;j++) 반복문 종료
				System.out.println("i = "+i+", j = "+j);}
		}//(1,1),(1,2),(2,1),(2,2),(3,1),(3,2),(4,1),(4,2),(5,1),(5,2) 출력
        
		
        //예제3
		//반복문에서 반복문을 구분하기 위한 식별자(라벨명) 선언 가능
		//형식) 라벨명:반복문
		loop:
		for(int i=1;i<=5;i++) {
			for(int j=1;j<=5;j++) {
				//break 라벨명 : 라벨명으로 표현된 반복문 종료
				if(j==3) break loop;           //for(int i=1;i<=5;i++) 반복문 종료
				System.out.println("i = "+i+", j = "+j);}
        }//(1,1),(1,2) → loop반복문 종료 




🌻 7. continue

  • 반복문에서 명령을 처음부터 다시 실행하기 위한 반복문
  • continue 명령 아래에 작성된 명령을 실행하지 않고 처음부터 다시 실행

🐣 예제

public class ContinueApp {
	public static void main(String[] args) {
    
    	//예제1
		for(int i=1;i<=5;i++) {
			if(i==3) continue;
			System.out.print(i+"\t");
		}//1	2	4	5 출력
		System.out.println();
		

		//예제2
		for(int i=1;i<=5;i++) {
			for(int j=1;j<=5;j++) {
				if(j==3) continue;		//for(int j=1;j<=5;j++) 반복문 재실행
				System.out.println("i = "+i+", j = "+j);}
		}//(1,1),(1,2),(1,4),(1,5),(2,1),(2,2),(2,4),(2,5),···(5,5) 출력
		

		//예제3
		loop:
		for(int i=1;i<=5;i++) {
			for(int j=1;j<=5;j++) {
				if(j==3) continue loop;	//for(int i=1;i<=5;i++) 반복문 재실행
				System.out.println("i = "+i+", j = "+j);}
		}//(1,1),(1,2),(2,1),(2,2),(3,1),(3,2),(4,1),(4,2),(5,1),(5,2) 출력
   
   
   
   
   

🎀 연습문제3 - 중첩 for 문

public class MultiforExample {
	public static void main(String[] args) {
    
    	//예제1
		//★★★★★  	 i=1  별=5 
		//★★★★     	 i=2  별=4
		//★★★      	 i=3  별=3
		//★★       	 i=4  별=2
		//★         	 i=5  별=1
		for(int i=1;i<=5;i++) { 
			for(int j=1;j<=6-i;j++) {
				System.out.print("★");}
			System.out.println();}
		


		//예제2
		// 1 2 3 4 5 >> j
		//★★★★★  i=1  흰별=0  검은별=5
		//☆★★★★  i=2  흰별=1  검은별=4
		//☆☆★★★  i=3  흰별=2  검은별=3
		//☆☆☆★★  i=4  흰별=3  검은별=2
		//☆☆☆☆★  i=5  흰별=4  검은별=1
		/*
		for(int i=1;i<=5;i++) {
			for(int j=1;j<=i-1;j++) {
				System.out.print("☆");}
			for(int j=1;j<=6-i;j++) {
				System.out.print("★");}
			System.out.println();}
		*/
		for(int i=1;i<=5;i++) {
			for(int j=1;j<=5;j++) {
				if(i>j) {
					System.out.print("☆");
				} else {				
					System.out.print("★");}
			}
			System.out.println();}
		


		//예제3
		//★                	i=1  별=1
		//★★★            	 	i=2  별=3
		//★★★★★         		i=3  별=5
		//★★★★★★★     		i=4  별=7
		//★★★★★★★★★ 		i=5  별=9
		for(int i=1;i<=5;i++) {
			/*
			for(int j=1;j<=5-i;j++) {
				System.out.print("  ");
			}
			*/
			for(int j=1;j<=i*2-1;j++) {
				System.out.print("★");}
			System.out.println();}
		
        
        
		//예제4
		// 1 2 3 4 5 >> j
		//★☆☆☆★  i=1
		//☆★☆★☆  i=2
		//☆☆★☆☆  i=3
		//☆★☆★☆  i=4
		//★☆☆☆★  i=5
		for(int i=1;i<=5;i++) {
			for(int j=1;j<=5;j++) {
				if(i==j || i+j==6) {
					System.out.print("★");
				} else {
					System.out.print("☆");}
			}
			System.out.println();}
 
 
 
 
 
 

profile
Study Log 📂

0개의 댓글

관련 채용 정보