💁 반복문(Loop Statement)이란,
프로그램 내에서 똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어하는 명령문
💁 for문은 초기식 및 조건식 확인 후, 조건식이 true면 문장 수행.
다시 증감식을 연산하고 조건식 확인 후, 조건식이 true면 또 문장 수행. (조건식이 false일 때까지 반복)
for(초기식; 조건식; 증감식) { }
- 조건식이 false면 수행하지 않음
for(int i = 1; i <= 10; i++) {
System.out.println(i);
}
📌 Ref.
* for문 초기식에 선언한 변수는 for문 내에서만 사용 가능
ex) System.out.println(i);참고사항 설명
>>> 결과를 누적시켜 담아줄 변수 선언
int sum = 0;
for(int i = 1; i <= 10; i++) {
sum += i;
>>> '+='으로 i를 누적
}
System.out.println("sum : " + sum);
int random = (int) (Math.random() * 6) +5 ; // 5~10 사이의 난수 발생시키기
>>> 합계를 누적할 변수
int sum = 0;
for(int i = 1; i <= random; i++) {
sum += i;
>>> 1부터 랜덤숫자까지의 합계
}
System.out.println("1부터 " + random + "까지의 합계는 " + sum + "입니다.");
단, 두 숫자는 같은 숫자를 입력하지않는 가정으로 해결
Scanner sc = new Scanner(System.in);
System.out.println("첫 번째 정수 입력 : ");
int first = sc.nextInt();
System.out.println("두 번째 정수 입력 : ");
int second = sc.nextInt();
>>> 여기서, 변수 first와 second를 for문에 직접 넣는 것은 오류가 날 수 있음
>>> 왜냐하면, 입력되는 두 번째 정수가 첫 번째 정수보다 작다면 for문의 i가 더 큰 수가 되기 때문에
>>> first와 second 중 어느 것이 더 큰 수인지 확인할 if문이 필요
>>> 두 수 중 작은 수가 i
int min = 0;
int max = 0;
if(first > second) {
max = first;
min = second;
} else {
max = second;
min = first;
}
int sum = 0;
for(int i = min; i <= max; i++) {
sum += i;
}
System.out.println(min + "부터 " + max + "까지의 합은 " + sum + "입니다.");
Scanner sc = new Scanner(System.in);
System.out.println("출력할 구구단의 단 수를 입력하세요 : ");
int dan = sc.nextInt();
>>> 입력한 숫자가 2~9 사이인지 조건 확인
if (dan > 1 && dan < 10) {
for (int su = 1; su <= 9; su++) {
System.out.println(dan + " * " + su + " = " + (dan*su));
}
} else {
System.out.println("반드시 2~9 사이의 양수를 입력해야 합니다.");
}
💁 for문에 진입하면 수행 될 문장1을 먼저 수행하고 두 번째 for문에 진입하면 조건식2가 false가 될 때 까지 수행 될 문장2를 수행.
조건식2가 false가 되어 반복문을 빠져 나오면
수행 될 문장3을 수행하고 조건식1로 돌아와 true면 다시 반복.
for(int i = 2; i <= 9; i++){
System.out.println("===============" + i + "단==============");
for(int j = 1; j <= 9; j++) {
System.out.println(i + " * " + j + " = " + i*j);
}
}
Scanner sc = new Scanner(System.in);
System.out.println("출력할 행의 수를 입력하세용 : ");
int row = sc.nextInt();
for(int i = 1; i <= row; i++) {
for (int j = 1; j <= 5; j++) {
System.out.print("*");
}
System.out.println();
>> *을 다섯개찍고 개행
}
Scanner sc = new Scanner(System.in);
System.out.println("출력할 행의 수를 입력하세용 : ");
int row = sc.nextInt();
for(int i = 1; i <= row; i++) {
>>> 행의 수만큼 별을 출력하는 반복문
for (int j = 1; j <= i; j++) { >>> i가 증가하는만큼 j도 증가
System.out.print("*");
}
System.out.println();
💁 while문은 조건식이 true일 때 반복문 진입, 아래 문장 수행, 조건 확인 후 false가 될 때까지 반복 후 종료
public void testSimpleWhileStatement() {
int i = 1; >>> 초기식
while(i <= 10) { >>> 조건식
System.out.println(i + " 출력");
i++; >>> 증감식 (없으면 while문을 탈출할 수 없으므로 무한루프)
}
}
public void testWhileExample1() {
Scanner sc = new Scanner(System.in);
System.out.println("문자열 입력 : ");
String str = sc.nextLine();
int index = 0;
while(index < str.length()) { >>> str.length() : 콘솔창에 입력된 str의 길이를 int(정수형)로 반환
>>> 여기서 <가 아닌 <=를 넣으면 오류. index는 0부터 시작하므로 같다는 조건을 붙이면,
>>> 콘솔에 입력한 문자보다 1이 많은 값까지 출력되므로 오류가 발생됨
char ch = str.charAt(index);
>>> ch : (apple을 콘솔창에 입력했을 때) 0번 인덱스에 있는 a, 1번 인덱스에 있는 p 등등
>>> 자리값을 char(문자형)으로 반환
System.out.println(index + " : " + ch);
>>> 증가하는 index(정수형) : 그 자리값의 char(문자형)
index++;
}
}
📌 Ref.
* charAt() : String 클래스의 메소드로 문자열에서 인덱스에 해당하는 문자를 char형으로 반환하는 기능
* length() : String 클래스의 메소드로 문자열의 길이를 int형으로 반환하는 기능
* index는 0부터 시작하고 마지막 인덱스는 항상 길이보다 1 작은 수를 가짐
* 만약 존재하지 않는 인덱스에 접근하게 되면 StringIndexOutOfBoundsException이 발생
(위의 조건식이 i <= str.length()가 될 경우)
public void testWhileExample2() {
Scanner sc = new Scanner(System.in);
System.out.println("정수를 하나 입력하세요 : ");
int num = sc.nextInt();
// while문 사용
int sum = 0;
int i = 1;
while(i <= num) {
sum += i; >>> 아래의 증감식(i++)을 이 식에 합쳐도 됨. 누적 대입 연산보다 후위연산자가 나중에 동작하므로 문제 X
i++;
}
System.out.println("1부터 입력받은 정수 " + num + "까지의 합계는 " + sum + "입니다.");
}
public void testWhileExample3() {
int dan = 2;
while(dan < 10) {
int su = 1; >>> 이 초기식의 위치가 맨 위로 가면 내부 while문이 실행되지 않아 2단만 출력함
while(su < 10) {
System.out.println(dan + " * " + su + " : " + (dan * su));
su++; >>> su가 9가 되면 while문 종료
}
dan++;
>>> 증감식의 위치 설정을 잘 고려해야함
}
}
💁 do 안의 내용 먼저 실행, 조건식 확인 후 true면 문장 수행, false면 종료
- while 뒤에 ; 꼭 필요
public void testSimpleDoWhileStatement() {
// while(false) {
// System.out.println("while문");
// }
>>> 컴파일 에러
do {
System.out.println("dowhile문");
} while(false);
>>> 둘 다 while이 false인 값이지만 do에서 일단 한번은 실행하기 때문에 에러가 나지않고 한 번 출력이 됨
}
public void testSimpleDoWhileExample() {
Scanner sc = new Scanner(System.in);
String str = "";
do {
System.out.print("문자열 입력 : ");
str = sc.nextLine();
System.out.println("입력한 문자 : " + str);
} while(!str.equals("exit"));
}
>>> while(!str.equals("exit")); 해석
: while(false)일때, 이 dowhile문이 종료
1. str에 “exit”이 입력되었나(값이 같은가)?
2. ! 아니요
3. 거짓말 했으니까 너 false
4. 종료
📌 Ref.
* 문자열(참조 자료형)은 ==, !=로 값 비교가 불가능
String 클래스에서 제공하는 equals() 메소드를 통해 비교해야함