본문 바로가기

Daily Studylog

DAY4. [JAVA] 반복문 (while 실습 / do while문/ break / continue) , 배열(Array / 확장 for문) + if문 실습문제

2022.04.19

 

[반복문]

 

*실습

*  11번 라인 : 정수 a에 입력되는 수가 0이 아닌 경우 while문이 실행

                    0이 아닌 숫자가 입력되면 계속 반복되어서 값이 누적되다가 0을 입력하면 반복문을 빠져나감

 

* while문 -> a에 정수를 입력

                     if문 -> a에 입력된 정수가 0이면 break 반복문을 빠져나감

                     if문이 false면 a의 값들이 누적

* while문 풀이

1) 번호 선택 텍스트 출력

2) 메뉴 선택 번호 입력 (스캐너)

3) 1번 선택 시, 예금 = 입력한 금액이 누적됨 (변수명 balance)

4) 2번 선택 시, 출금 = 입력한 금액이 차감됨 (변수명 balance)

5) 3번 선택 시, 잔고 확인 = balance에 누적되어 있는 금액이 출력

6) 4번 선택 시, "프로그램 종료" 라고 출력

7) 1-4가 아닌 다른 숫자를 입력할 경우 "잘못 입력했습니다" 라고 출력

*while문 풀이

변수 초기화 후,

1) 구매 수량 입력 (스캐너)

2) 금액 지불 (스캐너)

3) 연산을 통해 구매 수량과 커피 단가를 곱한 값을 total에 저장

4) 연산을 통해 지불한 금액에서 total을 차감후 balance에 저장

5) if문 사용해서 balance가 0원보다 크면 if문을 빠져나와서 "거스름돈 : d원 입니다" 출력

6) if문에서 빠져나오지 못한 경우, "d원이 부족합니다." 출력

 

1. Do While문 

while문과는 다르게 조건이 거짓이라도 적어도 한 번은 실행문이 실행되는 반복문

<형식>

do {

      ~ 실행문 ~

}while(조건문){

      ~ 실행문~

}

위 사진을 보면 do while문과 while문의 실행 횟수가 1회 차이가 나는 것을 볼 수 있음 -

 

2. break

반복문에서 특정 조건일 때 반복문을 빠져나가는 용도로 사용됨

 

ex.

*코드 풀이

while문의 조건은 n이 10이랑 같거나 작을  때까지 실행문이 실행되는 것인데,

while문 안에 있는 if문에서 n이 8과 같으면 break를 하도록 명령했기 때문에

실제로 실행해보면 1-7까지만 실행되고 while문을 빠져나감

 

 break lable문 

지정한 레이블의 반복문을 빠져나감

ex.

exit_for:

for(int i=0; i<3; i++) {

     for(int j=0;j<5;j++{

          if(j==3){

             break exit_for;

          }

break lable문을 보면  j가 3이 된 순간 for문을 빠져나가서 더 이상 실행문이 실행되지 않음

 

*다중 반복문에서 break를 사용하면 전체 반복문을 빠져나가는 것이 아니라 break가 포함되어 있는 반복문만 빠져나감!

 

3. continue

특정한 조건을 만족할 경우 현재 반복을 건너뛰는 명령문

*continue문은 거의 항상 if~else 문에서 사용됨

 

ex.

위 사진에서 continue를 실행하는 조건은 3의 배수(3으로 나눴을 때 나머지가 0인 경우)이기 때문에

콘솔 창을 보면 3의 배수를 제외한 숫자들이 출력된 것을 볼 수 있음

 

 

[배열]

- 배열은 같은 타입의 데이터를 연속된 공간에 나열하고, 각 데이터에 인덱스(index)를 부여해놓은 자료구조

- 배열의 각 인덱스는 각 항목의 데이터를 읽거나 저장하는 데 사용되며 배열 이름 옆에 대괄호[] 안에 입력

- 인덱스는 0부터 시작

- 배열은 참조 타입

 

  * Java의 기본 타입과 참조 타입  

기본 타입으로 선언된 변수는 실제 값을 변수에 저장하지만,

참조타입 변수는 메모리 주소를 값으로 갖게 된다. 즉, 주소를 통해 배열의 실제값을 참조한다는 뜻으로 참조 타입이라고 부른다.

 

 

1. 배열 선언 및 생성 

- 배열의 데이터 타입은 통일해야 함

더보기

//배열 선언

char[] ch;

//배열 생성

ch = new char[4];

2. 배열 초기화

더보기

ch[0] = 'J';

ch[1] = 'a';

ch[2] = 'v';

ch[3] = 'a';

* 배열의 선언과 생성만 하면 [] 인덱스의 개수를 지정해줌

   배열의 선언,생성과 초기화를 같이 하면 [] 개수를 지정하면 안 됨!

  ex. int[] array = new int[5]; // 인덱스 5개를 만듦 (0~4)

        char[] ch2 = new char[] {'D','I','N','G'}  //인덱스 개수를 명시하지 않고 바로 값을 입력

 

3. 배열 출력

더보기

System.out.println(ch[0]);

System.out.println(ch[1]);

System.out.println(ch[2]);

System.out.println(ch[3]);

 

//console

J

a

v

a

4. 반복문을 이용한 배열의 요소 출력

더보기

for(int i=0;i<ch.length;i++) {

System.out.println("ch[" + i + "]:" + ch[i]);

}

 

//console

ch[0]:J

ch[1]:a

ch[2]:v

ch[3]:a

* ch.length => 배열의 길이 /. length를 사용하면 길이를 나타냄

 

5. 명시적 / 암시적 배열 생성

더보기

int[] it = new int[6];  // 인덱스에 값을 넣지 않고 그냥 배열만 생성

 

System.out.println(it);

 

//console

[I@3234e239  // 배열이 저장된 주소가 출력됨

- 명시적 배열 생성 및 초기화

더보기

char[] ch2 = new char[] {'J','a','v','a'};

 

System.out.println(ch2);

 

//console

Java

- 암시적 배열 생성 및 초기화

더보기

char[] ch3 = {'자','바'};

 

System.out.println(ch3);

 

//console

자바

 

6. 다양한 배열 실습

 

* 배열의 선언, 생성 및 초기화 + 배열의 요소 변경

- 배열의 요소는 같은 자료형으로만 변경 가능!

public class ArrayMain02 {
	public static void main(String[] args) {
		//배열 선언 및 생성
		int array[] = new int[5];
		
		//반복문을 이용해서 배열의 요소 출력
		//배열을 생성하면 배열의 요소로 기본값이 저장됨
		//정수형 배열은 0을 기본값으로 해서 배열을 생성하면 배열의 요소를 0으로 채움
		for(int i=0;i<array.length;i++) {
			System.out.println("array["+i+"]:"+array[i]);
		}
        
        /*
        console
        array[0]:0
        array[1]:0
        array[2]:0
        array[3]:0
        array[4]:0
        */
		
		System.out.println("----------------");
		
		//배열의 요소 변경
		array[0] = 10;
		array[1] = 20;
		array[2] = 30;
		array[3] = 40;
		array[4] = 50;
		
		for(int i=0;i<array.length;i++) {
			System.out.println("array["+i+"]:"+array[i]);
		}
        
       /*
       console
        array[0]:10
        array[1]:20
        array[2]:30
        array[3]:40
        array[4]:50
		
	}
}
public class ArrayMain03 {
	public static void main(String[] args) {
		//배열의 선언, 생성(암시적 배열 생성), 초기화
		int[] array = {10, 20, 30, 40, 50};
		
		//반복문을 이용한 배열의 요소 출력
		for(int i=0;i<array.length;i++) {
			System.out.print(array[i] + "\t");
		}
        
        /*
        console
        10  20  30  40  50
        */
		
		//배열의 요소 변경
		//같은 자료형의 데이터로 변경해야함
		array[3] = 50;
		//array[4] = 100.67; -- 오류발생
        
        System.out.println(array[3]);
        
       
       /*
       console
       50
       */
	}
}

* for문을 활용하여 성적을 저장하는 배열 생성하기

	public static void main(String[] args) {
		//성적을 저장한 배열 생성
		//배열의 선언 및 생성, 초기화
		int[] score = {100,88,88,100,90};
		
		int sum = 0;
		float average = 0.0f;
		
		for(int i=0;i<score.length;i++) {
			//누적, 총점 구하기
			sum += score[i];
		}
		
		//평균 구하기
		average = sum / (float)score.length;
		
		System.out.printf("총점 : %d%n",sum);
		System.out.printf("평균 : %.2f",average);
        

           /*
           console
           총점 : 466
           평균 : 93.20
           */
           
	}
}

* for문을 활용하여 배열의 최대값과 최솟값 구하기

public class ArrayMain05 {
	public static void main(String[] args) {
		//배열의 선언, 생성, 초기화 (암시적 배열 생성)
		int[] score = {79,88,91,33,100,55,95};
		
		//배열의 첫번째 값으로 초기화
		//배열의 0번에 있는 데이터를 기준값으로 설정한 것임.
		int max = score[0];
		int min = score[0];
		
		for(int i=1;i<score.length;i++) {
			//최대값 구하기
			if(score[i] > max) {
				max = score[i];
			}
			//최소값 구하기
			if(score[i] < min) {
				min = score[i];
			}
			
		}
		//최대값, 최소값 출력
		System.out.println("최대값 : " + max);
		System.out.println("최소값 : " + min);
		
	}
	
}

* 확장 for문을 이용한 배열

public class ArrayMain06 {
	public static void main(String[] args) {
		//배열의 선언 및 생성, 초기화
		int[] array = {10,20,30,40,50};
		
		//반복문을 이용해서 배열의 요소를 출력
		for(int i=0;i<array.length;i++) {
			System.out.println("array[" + i + "]:" + array[i]);
            
        /*
        console
        array[0]:10
		array[1]:20
        array[2]:30
        array[3]:40
        array[4]:50
		*/
        
		}

		//개선된 루프(확장 for문) - 내부적으로 인덱싱함
		for(int num : array) {
			System.out.println(num);
            
        /*
        console
        10
        20
        30
        40
        50
        */

		}
	}
}
public class ArrayMain07 {
	public static void main(String[] args) {
		//배열의 선언 및 생성
		String[] array = new String[3];
		
		//배열의 초기화
		array[0] = "Java";
		array[1] = "Oracle";
		array[2] = "JSP";
		
		for(int i=0;i<array.length;i++) {
			System.out.println(array[i]);
  		}
        
         /*
        console
        Java
        Oracle
        JSP
        */
		
		//확장 for문
		for(String s : array) {
			System.out.println(s);
		}
        
         /*
        console
        Java
        Oracle
        JSP
        */
        
	}
}

 

 

[IF문 실습]

 

 

/*

* if문 [실습] (복습)

* 생년월일을 입력하고 만 나이를 출력하는 프로그램을 작성하시오.

* 만 나이 = (현재 연도 - 태어난 연도) - (생일이 지났으면 0, 생일이 안 지났으면 1)

* 

* [출력 예시]

* 연도 입력:

* 월 입력:

* 일 입력:

* 만 나이는 ~~

*/

선생님 답안이랑 다름 ,, 다시 풀어보기 !!