TIL 6일차. 반복문

김기현·2025년 2월 17일

1.while문

while문의 구성은 다음과 같다

while(조건식) {
	수행될 코드 ;
	[증감식 or 분기문];
}

조건식이 true 일때 코드를 수행하므로 반드시 반복을 벗어날 연산이 필요하다

for문과 while문의 사용비교

for문 : 반복 횟수가 정해진 반복일 때 주로 사용
while문 : 반복 횟수가 정해지지 않을 때 주로 사용
do~while문 : 반복 횟수가 정해지지 않은 반복일 때 주로 사용하나
반복 여부를 결정 짓는 조건식이 끝에 있어 한번은 반드시 실행된다

이때 for문과 while문은 반복 여부를 결정 짓는 조건식이 처음에 제시되므로
한번도 실행되지 않을 수 있다

do~while문의 구성은 다음과 같다

do {
	수행될 코드;
	[증감식 or 분기문];
} while (조건식);

do 안의 내용이 먼저 실행되고 while의 조건식을 확인하러 가기 때문에 while문과
다르게 반드시 한번은 실행된다

분기문 break은 반복문에서 자신이 포함된 가장 가까운 반복문을 빠져나가는 구문이다.

분기문 continue는 반복문 내에서만 사용 가능하여 반복문 실행 시 continue 아래 부분을 실행하지 않고 다시 반복문을 실행하다.

다음은 break문과 continue문을 동시에 사용한 예제이다.

public void ex4() {
	//1~100까지 1씩 증가하여 출력
	//단 5의 배수 제외
	//제외하는 값이 40이 되었을 때 반복 멈춤
	
	for(int i=1;i<=100;i++) {
		if(i==40) {
			break;
		}
		if(i%5==0) {
			continue;
		}
		System.out.print(i+" ");

2.배열

배열 : 같은 자료형의 변수를 하나의 묶음으로 다루는 것
-한가지 자료형만 저장 가능하다
-여러 값을 저장할 수 있다
-배열은 저장된 값마다 인덱스 번호가 0부터 시작하여 설정된다
-한번 크기를 지정하면 변경 불가능하다

예시로 int[]arr = new int[5]; 라 할 수 있으며 5칸의 새로운 arr배열을 말한다

배열의 선언과 할당

배열 선언은
자료형[] 배열명;
자료형 배열명[]; 의 형태로 가능하다

배열의 할당은
자료형[] 배열명 = new 배열명[배열 크기]
자료형 배열명[] = new 배열명[배열 크기] 의 형태로 가능하다

변수 : 메모리에 값을 저장할 수 있는 공간
변수 선언 : 메모리에 값을 저장할 수 있는 공간을 할당
배열 선언 : 메모리에 배열을 참조하는 변수 공간을 만듦
해당 배열은 참조형으로 주소값만을 저장한다
배열 할당 : 실제 값을 저장할 수 있는 배열을 메모리(Heap)에 생성
Heap에 할당된 공간은 절대 비어있을 수 없으며 boolean은 false,
참조형은 null, 나머지는 0으로 기본 설정된다.이때 char는 유니코드를 따르기 때문에 0은 공백과 같으므로 print시 공백이 출력된다

배열 초기화
인덱스를 이용한 초기화 // arr[0]=1;
for문을 이용한 초기화 // for(int i=0; i<arr.length;i++){arr[i]=i;}
선언과 동시에 초기화 // int[] arr = {1,2,3,4,5};, int[] arr = new int[]{1,2,3,4,5}

배열이름.length : 배열안의 변수 개수
str1.equals(str2); : 문자열 str1과 str2를 비교하는 것으로 true false로 값이 출력된다
Arrays.toString(); : 배열 안의 내용을 출력. print 구문과 같이 사용해야함.
Math.random(); : 0.0이상 1.0.미만의 난수를 생성

참조형인 배열 안의 변수를 출력하기 위해서 System.out.println(Arrays.toString());이라는 형태의 구문을 사용해야한다. 하지만 같은 참조형인 String의 출력은 System.out.pringln();의 형태만으로도 출력이 가능하다. 이는 String의 특수성으로 자동으로 toString이 실행된다 생각하면 되다.

참조형의 저장 방식
-String str1 = “가나다”
-String str2 = “가나다”
-String str3 = new String(“가나다”)
-String str4 = new String(“가나다”)
의 형식으로 저장할 때 str1과 str2는 Heap에 존재하는 상수풀(객체)에서 “가나다”라는 변수를 가져오게 되며, str3과 str4는 각자 Heap에 새로운 객체를 생성하여 “가나다”라는 변수를 가져오게 된다.

다음 예제는 for문과 배열을 이용한 간단한 예제이다

public void ex3() {
	//5명의 키를 입력 받고 평균 구하기
	//1번키 입력 : 170.5
	//2번키 입력 : 163.7
	//3번키 입력 : 170.0
	//4번키 입력 : 167.2
	//5번키 입력 : 177.3
	//평균 : 177.02
	
	double[] height = new double[5];
	//double[] 자료형 참조변수 height를 stack영역에 생성하고
	//height에 heap영역에 새로 생성된 double 5칸짜리 배열의 주소를 대입
	
	for(int i=0;i<height.length;i++) {
		System.out.print((i+1)+"번 키 입력 : ");
		height[i]+=sc.nextDouble();
		//heigth의 i번째 인덱스에 입력값 추가
	}
	System.out.println();
	
	double sum=0;//합계 저장용 변수
	
	for(int i=0;i<height.length;i++) {
		sum+=height[i];
	}System.out.printf("\n평균 : %.2f",sum/height.length);
	
}

다음 예제는 flag라는 boolean을 설정하여 사용하였다

public void ex7() {
	//입력받은 값과 일치하는 값이 있으면 인덱스 번호 출력
	//없으면 '존재하지 않음' 출력
	
	String[] arr= {"사과","딸기","바나나","키위","멜론","아보카도"};
	
	/*과일 입력 : 아보카도
	 *5번 인덱스에 존재
	 *
	 *과일 입력 : 수박
	 *존재하지 않음
	 */
	
	System.out.println("과일 입력 : ");
	String fruit=sc.next();
	boolean flag=false;
	
	for(int i=0;i<arr.length;i++) {
		if(arr[i].equals(fruit)) {
			System.out.println(i+"번 인덱스에 존재");
			flag=true;
		}
		
	}if(!flag) {
		System.out.println("존재하지 않음");
	}
	
	
}

오늘은 다양한 상황에서 사용 가능한 메서드와 while문 배열에 대한 강의를 수강하였다. 저번주의 강의들이 명확한 용도와 함께 머리속에 정렬되었다면 오늘은 다소 뒤죽박죽 섞여서 머리속에서 정리가 다소 힘들다. 각 상황에 맞는 구문을 사용하는 것을 목표로 하기 위해서는 각 구문들의 기본 원리를 잘 이해하고 있어야 한다. 오늘 배운 while, continue, 배열, flag, length, Arryas, toString를 다시 복습하자.

profile
모든게 처음

0개의 댓글