반복문
: 프로그램 수행 흐름을 바꾸는 역할을 하는 제어문 중 하나로 특정 문장들을 반복해서 수행하도록 함
1) for문 ( 몇바퀴 돌지 안다면 for)
구문
for(초기식; 조건식; 증감식) {
반복 수행 코드;
}
for(int i = 1; i <= 10; i++) {
System.out.println(i + "출력");
}
정의 : ~을 하는 동안의 의미로, 조건식을 만족할 때까지 반복해라
- 초기식 : for문 내부에서 사용할 변수. 보통 for문의 반복 제어를 위해 사용한다.
- 조건식 : for문의 반복 여부를 지정하는 식.
보통 초기식에 사용한 변수를 이용하여 조건식을 작성한다.
언제까지 반복 할 것인지에 대한 조건(true/false)
조건식이 true면 문장 수행 후 증감식 연산 조건식이 false면 수행하지 않는다.
- 증감식 : 초기식에 사용된 변수를 for문이 종료할 때 마다 증가 또는 감소시켜 조건식의 결과를 변화하게한다.
보통 초기식을 이용하며 그 값을 증가 또는 감소시켜 반복문이 반복됨에 따라 조건식 결과를 변하게 되는 경우를 만들어 낸다.
1회전: 초기식이 조건식을 만족하는 true면 문장 수행 후 증감식 연산
2회전부터는 조건식이 false가 나올 때까지 문장 수행
i++ (후위를 쓰는 이유) : 전위를 써도 상관은 없지만 연산이 i혼자만 이루어지기때문에 ++i써도 상관은 없다.
하지만 다른 식으로 나온다면 따져야한다
증감식이 단순히 초기식 1 증가/감소로 작성된 경우, 전위, 후위 연산을 구분하지 않음.
기초1) 1~20까지 2씩 증가하며 출력
for(int i = 1; i <= 15; i+=2) {
System.out.println(i);
}
복합대입연산자( +=, -=, *=, /=)
:기존 변수의 값에 새로운 값을 누적시켜 저장한다.
만약 부등호 오류나면
오류1 : 조건식 부등호 방향을 잘못 작성한 경우
한 번도 실행되지 않거나, 무한히 실행된다
기초+ 응용) 'A' ~ 'Z' 순서대로 알파벳 모두 출력하기
for(char i = 'A'; i <='Z'; i += 1) {
System.out.println(i);
}
chat == 문자형 == 실제로는 정수를 저장
-> 저장된 정수값에 맞는 문자 모양을 유니코드표에서 찾아 출력
응용1)정수 5개를 입력 받아 합계 출력
for(int i=1; i<=5; i++) {
결과
예제)
정수 두개 입력 받아 5의 배수인 수는 빼기
// for문 응용문제
// 정수를 두개 입력받아
// 두 정수 사이의 모든 정수의 합계를 구한다. = sum
// 단, 합계에서 3의 배수 제외 3배수 제어;
// 예시1)
// 정수 입력 : 1
// 정수 입력 : 10
// 3의 배수를 제외한 합계 : 37
내가 푼 코드
public void example10() { //실습
Scanner sc = new Scanner(System.in);
System.out.print("정수 입력1 : ");
int num1 = sc.nextInt();
System.out.print("정수 입력2 : ");
int num2 = sc.nextInt();
int sum1 = 0;
int sum2 = 0;
for(int i = num1; i <= num2; i++ ) {
sum1 += i;
}
for(int j = num1; j <= num2; j+=3 ) {
sum2 += j; //점수 누적
}
System.out.print(sum1-sum2);
}
i % 3 != 0
3의 배수가 아닐때!
너무 스트레스 받아서 기억할 수 밖에 없을듯
2) 중첩 for문
구문
for(초기값1; 조건식1; 증감식1) {
수행될 코드1;
for(초기값2; 조건식2; 증감식2) {
수행될 코드2;
}//안 쪽 for문 end
수행될 코드3;
} //바깥쪽 for문 end
for(int min = 0; min <=59 ; min++) { //min 60미만까지 1씩 증가
// 1분 == 60초
for(int sec = 0; sec < 60; sec++) {
System.out.printf("%02d분 %02d초\n", min, sec );
// 02d : 2칸 확보하여 오른쪽 정렬, 빈칸에 0추가
// 01, 02,03
}
}
안의 반복문이 다 끝나야
밖으로 나온다
==> 안쪽 반복문이 진행되면
바깥쪽 반복문이 1 증가하는 형태
그러니 안과 밖의 for문 사이에 추가하고싶은게 있다면
바깥 for문에 넣기
public void example12() {
//중첩 반복문 기초1
// 구구단 2~9단 모두 출력하기
// 단 x 수
// 각 단을 구분할 수 있도록 한 칸 띄기
for(int dan = 2; dan <=9; dan++) { //단 부터
for(int su =1; su <= 9; su++) { //
System.out.printf("%d x %d = %2d\n", dan, su, dan*su);
} //수 반복
//su가 끝나고 나왔을때 한 줄을 띈다
System.out.println();
}// dan 끝
}
구구단 응용
한 줄에 한 단씩 출력하기
public void example13() {
//중첩 반복문2
// 구구단 2~9단 모두 출력하기
// 한 줄에 한 단씩 출력하기
//ex)
// 2 x 1 = 2
// 3 x 1 = 3
for(int dan = 2; dan <=9; dan++) {
for(int su = 1; su <= 9; su++) {
System.out.printf("%dx%d = %2d ", dan, su, dan*su); //한 단이 끝나면
}// su 반복 끝
System.out.println(); //
}//dan 반복 끝
}
예제
public void example17() {
// 중첩 반복문 응용4
// 알고리즘+ 로직 문제
//2중 for문을 이용하여 아래 모양을 출력
//1
//12
//123
//1234
// i =1 일때 1
// i =2 일때 12
// i =3 일때 123
// i =4 일때 1234
for(int i = 1; i <= 4; i++) {
for(int j = 1; j <= i; j++) { //반복 되는 행의 수에 따라 출력되는 횟수가 변경
System.out.print(j);
}//안쪽 숫자for문
System.out.println();
}// 행 for문
}
public void example18() {
// 1234
// 123
// 12
// 1
for(int i = 4; i >= 1; i--) { // 위의 코드에서 아래만 바꾸면된다
for(int j = 1 ; j <= i; j++) { //반복 되는 행의 수에 따라 출력되는 횟수가 변경
System.out.print(j);
}//안쪽 숫자for문
System.out.println();
}// 행 for문
}
3) while문 (언제까지)
while(조건식) {
조건식이 true일 경우 수행할 코드;
[증감식 or 분기문];
}
조건식이 만족하는 동안 수행될 코드를 한다.
: 별도의 초기식, 증감식이 존재하지 않고 반복 종료 조건을 자유롭게 설정하는 반복문
=> 언제 끝날지는 모르지만 종료조건은 있다
4) do - while문
구문
do {
//최소 한번은 수행할 코드
} while (조건식) ;
// while
Scanner sc = new Scanner(System.in);
System.out.println("문자열 입력 (종료 시 !exit)");
String str = ""; // 문자열 누적 저장용 변수
String input = ""; // 입력 받는 용도의 변수
// input값이 !exit일 경우 while문이 수행되지 못한다.
while(!input.equals("!exit")) {
//input에 저장된 값이 !exit과 같을 경우에만 반복 //false
// (input은 위에서 ""로 선언했기 때문에 while이 실행되지 않는다
//!input.equals("!exit") : 대입과 비교값이 다를경우에만 반복한다 //true
input = sc.nextLine();
if(!input.equals("!exit")) {
str += input + "\n";
}
// str += input + "\n";
// if문을 쓰지 않는다면 !exit이 str안에 누적된다.
}
System.out.println();
System.out.println(str);
}
while문을 do -while로 변환
// do - while
Scanner sc = new Scanner(System.in);
System.out.println("문자열 입력 (종료 시 !exit)");
String str = ""; // 문자열 누적 저장용 변수
String input = ""; // 입력 받는 용도의 변수
do {
input = sc.nextLine();
if(!input.equals("!exit")) {
str += input + "\n";
}
} while(!input.equals("!exit"));
System.out.println();
System.out.println(str);
}
do {}안에 있는 내용을 일단 실행한 후에
일단은 do 내부에 있는 구문을 최소 한번은 수행하고 마지막에 반복 조건을 따지는 구문
for 와 while의 차이
for : 몇 번 반복할 것인가 (원하는 횟수를 조절) ex) 줄넘기 10번해라 명확한 종료조건
while: 언제까지 ex) 줄넘기 줄이 발에 걸릴때 까지 , 몇바퀴를 돌지 모르는 종료조건
while (문자열.equals(문자열과 비교할 문자열))
if 문을 사용하다가 값이 true false가 나올 수 있는 상황 or 값이 여러개라면 flag를 사용할 수 있다.
'Backend > 개발 공부' 카테고리의 다른 글
[Git] 원격 저장소 Github 저장소 (0) | 2021.11.30 |
---|---|
[Git] 다운로드, local 설정 (0) | 2021.11.29 |
[Java | Eclipse] class, project 정리 (0) | 2021.08.31 |
[JAVA|Eclipse] if, else if (조건문) (0) | 2021.08.30 |
[JAVA|Eclipse] Method + escape + scanner (0) | 2021.08.27 |