반복문
프로그램 흐름을 제어하는 제어문 중 하나
어떤 실행코드를 반복적으로 수행시켜줌
크게 두 종류로 나뉨 (for문 / while문(do-while문))
for문
[표현법]
for(초기식; 조건식; 증감식){ // 반복 횟수를 지정하기 위해 제시하는 것들
반복적으로 실행시키고자 하는 구문;
}
- 초기식 : 반복문이 수행될 때 "처음에 단 한번만 실행되는 구문"
(보통 반복문 안에서 사용될 변수를 선언 및 초기화 하는 구문)
- 조건식 : "반복문이 수행될 조건"을 작성하는 구문
조건식이 true일 경우 해당 구문을 실행
조건식이 false가 되는 순간 반복을 멈추고 빠져나옴
(보통 초기식에 제시된 변수를 가지고 조건식을 작성한다.)
- 증감식 : 반복문을 제어하는 변수 값을 증감 시키는 구문
(보통 초기식에 제시된 변수를 가지고 증감연산자(++, --)
예제1) "안녕하세요"를 5번 반복해서 실행하기
반복문을 사용하지 않는다면 ?
System.out.println("안녕하세요");
System.out.println("안녕하세요");
System.out.println("안녕하세요");
System.out.println("안녕하세요");
System.out.println("안녕하세요");
for 반복문을 사용한다면 ? => 매우간단해진다.
for(int i = 1; i <= 5; i++) { // i값이 1에서 부터 5까지 매번 1씩 증가하는 동안 반복 수행 (1,2,3,4,5 => 5회 수행)
// 반복할 코드
System.out.println("안녕하세요");
}
예제2)
// 1부터 5까지 출력
// for문
for(int i = 1; i <= 5; i++) {
System.out.println(i);
}
// 1 2 3 4 5 (사이사이 공백을 넣어서)
for(int i = 1; i <=5; i++) {
System.out.print(i + " ");
반대로 5 4 3 2 1 을 출력하고 싶다면?
public void method3() {
// 5 4 3 2 1
for(int i = 5; i > 0; i--) {
System.out.print(i + " ");
}
}
예제3)
// 1부터 10까지의 홀수만을 입력
// 1 3 5 7 9
방법 1.
for(int i = 1; i <= 10; i += 2) { // i값이 1에서부터 9까지 매번 2씩 증가되는 동안 반복 수행 (1,3,5,7,9 => 총 5회)
System.out.print(i + " ");
}
방법 2.
for(int i = 1; i <= 10; i++) { // i값이 1부터 10까지 매번 1씩 증가되는 동안 반복 수행(10번)
if(i % 2 == 1) {
System.out.print(i + " ");
}
}
예제4)
// 1 2 3 4 ... 8 9 10
단 int i = 1 고정
for(int i = 0; i <= 9; i++) {
System.out.print( i + 1 + " ");
}
예제5)
1에서부터 10까지의 총합계
방법1.
int sum 1 + 2 + 3 + ... + 8 + 9 + 10;
방법2.
int sum = 0;
sum += 1; => sum + sum + 1; 0 + 1
sum += 2; => sum + sum + 2; 0 + 1 + 2
sum += 3; => sum + sum + 3; 0 + 1 + 2 + 3
int sum = 0;
for(int i = 1; i <= 10; i++ ) {
sum += i; // 누적합
}
System.out.println("1부터 10까지의 합 : " + sum);
예제6) 사용자에게 값을 입력 받아 1부터 입력받은 수까지의 합계 출력
/*
* int sum = 0;
*
* sum += 1;
* sum += 2;
* ...
* sum += i
*/
Scanner sc = new Scanner(System.in);
System.out.print("정수를 입력하세요");
int num = sc.nextInt();
if(num > 0) {
// 누적합
// 1. sum 변수만들기
int sum = 0;
// 2. for문 돌리기
for(int i = 1; i <= num; i++) {
// 누적합 공식
sum += i;
}
System.out.println("1부터 " + num + "까지의 합 : " + sum);
}else {
System.out.println("잘못입력했어");
}
sc.close();
예제7) 1에서 부터 어떤 랜덤값(1~10 사이의 랜덤값) 까지의 총 합계 구해보기
랜덤값 호출하는 법
* java.lang.Math 클래스에서 제공하는 random() 메소드를 호출해서
* 매번 다른 랜덤값을 얻어 낼 수 있음!!
* math.random(); 이런식으로 호춣 => 0.0 ~ 0.999999 사이의 랜덤값 발생
* (0.0 <= <1.0)
Math.random() 사용법
int random = Math.random(); // double 형이라서 안됨.. 강제 변환해야됨
0.0 이상 1.0 미만 => 0.0 ~ 0.999999
int random = Math.random() * 10;
0.0 이상 10.0 미만 => 0.0 ~ 9.99999
int random =Math.random() * 10 + 1;
1.0 이상 11.0 미만 => 1.0 ~ 10.99999
int random = (int)(Math.random() * 10 + 1); // 시작수는 더하고 얻고 싶은 갯수를 곱한다.
1 이상 11 미만 => 1 ~ 10
int random = (int)(Math.random() * 10 + 1); // 시작수는 더하고 얻고 싶은 갯수를 곱한다.
System.out.println("1~10 사이의 랜덤값 : " + random);
// 누적합 구하는 방법
// 1. sum 변수만들기
int sum = 0;
// 2. for문 구하기
for(int i = 1; i <= random ;i++) {
// 누적합 공식
sum += i;
}
// 1부터 random 까지의 합계
System.out.println(sum);
예제8) Hello에서 각 인덱스별 문자를 뽑아서 출력
* H => str.charAt(0);
* e => str.charAt(1);
* l => str.charAt(2);
* l => str.charAt(3);
* o => str.charAt(4);
for(int i = 0; i <= 4; i ++) {
System.out.println(str.charAt(i));
}
그렇다면 사용자에게 받은 문자를 인덱스별 문자를 뽑아서 출력하는 방법은 ?
apple의 길이 : 5글자
01234
strawberry : 10글자
0123456789
kiwi : 4글자
0123
ㅇㅎ! 마지막 인덱스는 항상 (문자열의 길이 -1) 이구나..
추출하고자 하는 인덱스값이 (문자열의 길이 -1) 까지 매번 1씩 증가
Scanner sc = new Scanner(System.in);
System.out.print("문자열 입력 : ");
String str = sc.nextLine();
System.out.println("문자열의 길이 : " + str.length());
for(int i = 0; i < str.length(); i++) {
System.out.println(str.charAt(i));
}
sc.close();
예제9) 구구단 2단 출력
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
...
2 x 8 = 16
2 x 9 = 18
for(int i = 1; i < 10; i++) {
System.out.println("2 x " + i + " = " + 2 * i);
System.out.printf("%d x %d = %d\n",2,i,2*i);
}
예제10) 사용자에게 단을 입력 받아 구구단 출력
int dan;
2~9 사이의 정수를 입력 => 가이드 문구
다른숫자를 입력했을 경우 : 2~9 사이의 숫자를 입력해야 됩니다. 잘못입력하셨습니다.
Scanner sc = new Scanner(System.in);
System.out.print("단을 입력하세요.(2 ~ 9 사이 정수)");
int dan = sc.nextInt();
if(dan > 1 && dan < 10) {
for(int i = 1; i < 10; i ++) {
System.out.printf("%d x %d = %d\n",dan,i,dan*i);
}
}else {
System.out.println("2 ~ 9 사이의 숫자를 입력해야 됩니다. 잘못입력하셨습니다.");
}
예제11) 2부터 9사이의 랜덤값 발생 시켜서 랜덤단 출력하기
int dan = (int)(Math.random() * 8 + 2); // 2가 시작수, 시작수로 부터 몇개의 랜덤값 발생시킬지 곱하면 된다.
System.out.println("=====" + dan + "단=====");
for(int i = 1; i < 10; i++) {
System.out.printf("%d x %d = %d\n",dan,i,dan*i);
}
이중반복문
예제12)
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
출력하기
for(int j = 1; j < 4; j ++) {
for(int i = 1; i < 6; i++) {
System.out.print(i + " ");
}
System.out.println();
}
예제13)
****
****
****
****
출력하기
for(int j = 1; j <= 4; j++) { // 행은 1~4 까지 반복 => 바깥쪽 for 문
for(int i = 0; i < 4; i++) { // 매 행 고정일 때 열은 1~4까지 반복 => 안쪽 for 문
System.out.print("*");
}
System.out.println();
예제14)
1*** => 1행 1열일때 1
*2** => 2행 2열일때 2
**3* => 3행 3열일떼 3
***4 => 4행 4열일때 4
for(int j = 1; j < 5; j++) { // 행
for(int i = 1; i < 5; i++) { // 열
if(j == i) {
System.out.print(i);
}else {
System.out.print("*");
}
}
System.out.println();
}
예제15) 구구단 2단부터 9단까지 출력하기
for(int j = 2; j < 10; j++) {
for(int i = 1; i < 10; i++) {
System.out.printf("%d x %d = %d\n",j,i,j*i);
}
System.out.println();
좀 더 보기 좋게 하려면 ?
for(int j = 2; j < 10; j++) {
for(int i = 1; i < 10; i++) {
System.out.printf("%d x %d = %d\t",i,j,j*i);
}
System.out.println();
}
마지막으로 초기식 조건식 증감식은 생략이 가능하다.
for( ; ; ) { //조건 생략시 기본적으로 true 인식 => 무한반복문
System.out.println("안녕");
}