[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
}
![](https://blog.kakaocdn.net/dn/stdMM/btskeeTyJSt/f5ADmgUqlgXVhmkklXKceK/img.png)
조건문이 참인 동안에 실행문장이 반복해서 수행된다
입력값 | 조건문 | 실행 |
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 |
댓글