본문 바로가기
🌈 백엔드/JAVA_기초

JAVA 개념_ 반복문

by 개발자 알마 2023. 2. 13.
반응형

 

 

 

[1] for 반복문 


(1) for 반복문

for(초기화 ;조건문 ;증가치;) {
수행문
}

for(int i = 0; i< 5; i++) {
 System.out.println(i);
}
---->i가 0부터 대입되어 0,1,2,3,4 순서대로 반복되어 출력된다

 

 

 

(2) for 다중 반복문 

 

for(int i = 0; i< 5; i++) {
      
    for(int j=0; j < i+1; j++ {
    	System.out.println("*");
    };
};

-------> 결과값
*
**
***
****
*****

 

 

(3) for each 반복문 

 

for(int 변수 : 배열이름 ) {
}
--->배열 의 인덱스 갯수만큼 반복하고 그 값을 변수에 담는다


int[] nums = {1,2,3,4,5}

for(int num : nums) {
	System.out.println(num);
}
------> i가 ++ 된다면 이방법으로 축약해서 사용하자

 

 

(4) for문의 생략가능한 문법 

  • 초기화 생략 
int i =0;
int sum =0;
		
for(  ; i<10; i++) {  
	sum += i;
			
		}
  • 조건식 생략
int i =0;
int sum =0;
		
for( int i =0 ;    ; i++) {  
	sum += i;
    if( sum >10) break;
			
		}
  • 증감식 생략 
for( int i =0 ; i <5;    ) {  
	
    i = (++i) % 10 ;
			
		}
  • 무한반복 
for( ; ;) {  
	
    i = (++i) % 10 ;
			
		}

 

(5) for문 증감식 사용방법

 

1부터 10까지 1씩 증가 
for(int i=1; i<=10; i++) { ... }

10부터 1까지 1씩 감소 
for(int i=10; i>=1; i--) { ... }

1부터 10까지 2씩 증가 
for(int i=1; i<=10; i+=2) { ... }

1부터 10까지 3배씩 증가 
for(int i=1; i<=10; i*=3) { ... }

i는 1부터 1씩 증가 , j는 10부터 1씩 감소 
for(int i=1, j=10 ; i<=10;i++, j--) { ... }

 

 

 

(6) for 예시 

 

package 패키지;

public class Test {

	public static void main(String[] args) {
	
		int count =1;
		int sum = 0;
		
		for( int i = 0 ; i<10; i++, count++) {  
			sum += count;
			
		}
        
		System.out.println(sum);
		
	}
}

 

[2] while 반복문 


(1) while 반복문

  • 조건문이 참인 동안 실행1을 반복한다
while(조건문) {
	실행1
}

조건문이 참인 동안에 실행문장이 반복해서 수행된다 

 

입력값 조건문 실행
1 n < 5 참 ; 반복
2 n < 5 참 ; 반복
3 n < 5 참 ; 반복
4 n < 5 참 ; 반복
5 n < 5 거짓 ; 반복 중지

 

(2) do ~ while 반복문

  • 수행1을 진행 한 후에 조건식이 참이라면 다시 수행1을 반복한다. 조건식이 거짓이라면 수행1을 반복하지 않는다 

 

  • do { 수행1 } while(조건식);

 

(3) while 다중 반복문 

  • 2x1 , 2x2 , 2x3 ... 9x9 구구단을 만든다 
package 패키지;

public class Test {

	public static void main(String[] args) {
		
		dan = 2;
        
		while( dan <= 9 ) {
			count = 1;
			while (count <= 9) {
				
				System.out.println( dan + "X" + count + "=" + dan * count);
				count++;
				
			}
            
			dan++;
            
			System.out.println();
		}
	}
}

 

(4) 무한 루프 방지를 위한 대비책

// i값이 5이상이 되면 반복문을 빠져나올수 있다 

while( i < 5) {
 System.out.println(i);
 i++
}

 while( i < 5) {
 System.out.println(i++);
}

 

(5) 무한루프 만들기

 

  while(true){

       .......
   }

 

(6) while 예시 

1부터 10까지 더한 값을 구하기

package 패키지;

public class Test {

	public static void main(String[] args) {

		int num = 1;
		int sum  = 0;
		
        // 1부터 10까지 더한 값을 구하라 
		while( num <= 10) {
			
			sum += num;
			num++;
		}
		
		System.out.println(sum);
		
	}

}

입력받은 값을 더하여 확인하기

package 패키지;

import java.util.Scanner;

public class Test {

	public static void main(String[] args) {

		Scanner scanner = new Scanner(System.in);
		int input; 
		int sum = 0;

//입력값을 sum에 더한 뒤 입력값이 0이 아니였다면 다시 입력값을 더하는것을 반복한다 
		do {
			input = scanner.nextInt();
			sum += input;
			
		}while(input != 0);

			
		System.out.println(sum);
	}

}

 

1부터 몇까지 더해야 100을 넘지 않은지 확인하기

int sum = 0 ;

int i =o;

while(sum <= 100) {

	System.out.printf("%d,%d%n", i ,sum);
    sum += ++i;
}

0,0
1,1
2,3
3,6
....
13,91
// 13번째 합산금액이 91이다

 

입력받은 값의 각 자리의 합을 구하기

num =Integer.parseInt(12345);

while(num!=0) {
	
    sum += num%10;
	System.out.printf("sum=%3d num=%d%n", sum ,num);
    num /=10;
}

5 , 12345
9 , 1234
12 , 123
14, 12
15 , 1

 

 

[3] 반복문의 선택


for문 특정 수의 범위 , 횟수와 관련하여 반복되는 경우 
배열에서 많이 씀
while문 조건식의 결과나 변수가 참,거짓 값이 나오는 경우 사용 
초기화, 증감식이 필요하지 않다면
do-while문 조건식의 결과나 변수가 참,거짓 값이 나오는 경우 사용 

 

 

 

for문을 통해 교집합 찾기 

Myset b를 넣었을때 교집합을 찾는 명령어를 만든다

 

public MySet retainAll(MySet b) {
	MySet result = new MySet();
    
    for(int itemA : this.list) {
    	for(int intemB: b.list) {
        	if(itemA == itemB) {
        		result.add(itemA);
			}
		}
	}
	return result;
}

 

 

Myset b를 넣었을때 합집합을 찾는 명령어를 만든다

public MySet addAll(MySet b) {
	MySet result = new MySet();
    
    for(int itemA : this.list) {
    	result.add(itemA);
		}
    for(int itemB : b.list) {
    	result.add(itemB);
	}
	return result;
}

 

Myset b를 넣었을때 차집합을 찾는 명령어를 만든다

public MySet removeAll(MySet b) {
	MySet result = new MySet();
    
    for(int itemA : this.list) {
    	boolean containFlag = false;
		
    	for(int itemB : b.list) {
    		if(itemA == iteamB) {
        		containFlag =true;
        		break;
			}
    	}
    	if(!containFlag) {
			result.add(iteamA);
    	}
    }
    return result;
}

 

 

MySet 클래스로 만든 로직을 불러와서 실제 데이터를 넣었을때 결과값을 리턴하자 

메인 클래스에서 

MySet a의 데이터를 초기화 선언하고 

a 집합 와 b 집합 의 데이터를 각각 넣는다 

MySet a = new MySet();

a = new MySet(new int[] {1,2,3,4,5});
Myset b= new MySet(new int[] {2,4,6,8,10};

 

a가 제대로 반환되는지 확인할때 사용하는 방법

return a.list;  // [1,2,3,4,5]

 

교집합,합집합 차집합 반환할때 넣을 result.list를 만들어 각 메소드로 반환한다

addAll() ---> 합집합

retainAll ---> 교집합

removeAll ---> 차집합 

MySet result = a.retainAll(b);

result = a.addAll(b);

result = a.removeAll(b);

return result.list;

 

 

for문으로 합의 법칙 찾기

주사위 2개 

int [] dice1 = {1 2 3 4 5 6};  
int [] dice2 = {1 2 3 4 5 6};

주사위1과 주사위2를 반복했을때(for) 

 

주사위1의 값 + 주사위2의 값 % 3 == 0 

(3의배수이기 떄문에 나눴을때 나머지가 없음)

 

주사위1의 값 + 주사위2의 값 % 4 == 0

(4의배수이기 떄문에 나눴을때 나머지가 없음)

 

주사위1의 값 + 주사위2의 값 % 12 == 0

(3과 4의 최소공배수 이기 떄문에 나눴을때 나머지가 없음)

 

위 조건일때 각각 sum이 몇인지 체크 후

int sum1 = 0;
int sum2 = 0;
int sum12 =0; 

for(int a :dice1) {
	for(int b : dice2) {
    	if( (a + b) % 3 == 0) {
        	sum1 +=1;
        }
        if( (a + b) % 4 == 0) {
        	sum2 +=1;
        }
        if( (a + b) % 12 == 0) {
        	sum12 +=1;
        }
    }    
}

 

3의 배수 갯수 + 4의 배수 갯수 - 중복 제거 

 

return sum1+sum2-sum12;

 

 

for문으로 곱의 법칙 찾기 

주사위 1을 반복할때 (for)

만약 나온 값 a가 3의 배수라면 sum1에 카운트+1

 

주사위2을 반복할때(for)

만약 나온 값 a가 4의 배수라면 sum2에 카운트+1

 

sum1 x sum2 = 1과 2의 조건이 맞는 경우 의 수 

int sum1 =0;
int sum2 =0;

for(int a : dice1) {
	if( a % 3 == 0) {
    	sum1++;
    }
}

for(int a : dice2) {
	if( a % 4 == 0) {
    	sum2++;
    }
}

return sum1 * sum2 ;

 

 

for 문으로 팩토리얼 값 구하기 

5! 만들기 

숫자 5까지 반복하면서 

1*2*3*4*5 = 값을 반환한다 

result 값이 1이 있어야지 1*1 한 값을 살려서 곱해줄수 있다    

int n =5;
int result = 1; 

for(int i =1; i <= 5 ; i++) {
	result *= i;
}

 

Stream으로 팩토리얼 값 구하기 

range (2,6) ---- > 인덱스 범위이므로 실제 값은 1 2 3 4 5

reduce () ---> 요소들을 하나의 데이터로 만드는 메소드이고 , 초기값 1에서 x 와 y를 * 한 값으로 데이터를 만들어라 

return IntStream.range(2,6).reduce(1,(x,y) -> (x * y))) ;

 

 

 

 

for문으로 순열 값 구하기 

5명을 3줄로 세우는 경우의 수  = 5 * 4* 3 

 

1줄에 넣을수 있는 가능한 갯수 5명

2줄에 넣을수 있는 가능한 갯수 4명 

3줄에 넣을수 있는 가능한 갯수 3명 

 

5부터 작아지는 순서대로 반복할때(for)

경우의 수를 곱해라 

((1*5)*4)*3 

 

int n = 5 ;
int m = 3 ;
int result = 1 ;

for(int i = n; i >= n-r +1 ; i--) {
	result *=i;
}
return result;

 

 

 

 

 

for문으로 중복순열 값 구하기 

서로 다른 4개의 수에서 2개를 뽑을때 가능한 수는 몇가지인가 

(중복가능)

총 2개를 뽑기위해 반복할때 (for)

첫번째에 숫자를 넣을수 있는 경우의 수 4  

두번째에 숫자를 넣을수 있는 경우의 수 4 

result = 4*4 = 4의 2승 = 16가지 

int n =4 ; 
int m = 2 ;
int result = 1;

for(int i =0; i < m ; i++) {
	result *= n ;
}
return result;

 

Math.pow로 중복순열 값 구하기 

n과 m의 제곱연산

return Math.pow(n,m);

 

 

 

 

 

for 문으로 원순열 값 구하기 

abc , bac 2가지

(1*1)*2

 

int n = 3;
result =1;

for(int i =1 ; i < n; i++) {
	result *=i;
}

return result;

 

 

 

for문으로 중복조합 값 찾기

 

static int combination (int n, int r) {

	int result1 =1 ;

	for(int i =n ; i >= n - r +1 ; i--) {
		result1 *=i;
	}

	int result2 =1;

	for(int i =1; i <= r ; i++ ) {
		result2 *=1;
	}

	return result1 / result2 ;
}

 

 

public static void main( String[] args) {
	int n =2;
	inr r =3;
	
    return combination(n+r-1,r)

 

for문을 이용하여 조합의 값 반환

 

서로 다른 4명 중 주번 2명을 뽑는 방법 

int n =4 ;
int r = 2;

int result1 =1 ;

for(int i =n ; i >= n - r +1 ; i--) {
	result1 *=i;
}

int result2 =1;

for(int i =1; i <= r ; i++ ) {
	result2 *=1;
}

return result1 / result2 ;

 

 

반응형

'🌈 백엔드 > JAVA_기초' 카테고리의 다른 글

JAVA_개념_break 문_continue 문  (0) 2023.02.23
JAVA 개념_조건문  (0) 2023.02.16
JAVA 개념_ 자료형  (0) 2023.02.13
JAVA 개념_연산자  (0) 2023.02.13
JAVA 개념_변수  (4) 2023.02.03

댓글