반복문은 코드가 반복적으로 실행되도록 할 때 사용되며, 반복문의 종류로는 for문, while문, do-while문이 있다.
for문은 반복 횟수를 알고 있을 때 주로 사용하고, while문은 조건에 따라 반복할 때 주로 사용한다.
while문과 do-wile문의 차이점은 조건을 먼저 검사하느냐 나중에 검사하느냐의 차이일 뿐 나머지는 같다.
// 1. for문 (단일 for문)
// for (초기식 ; 조건식 ; 증감식) {
// 실행 코드;
// }
// 1회전(첫회전 시)
// 초기식 - > 조건식 확인 - > (조건식이 true일 때) 실행코드 실행 - > 증감식 수행
// 2회전 이후
// 조건식 확인 - > (조건식이 true 일 때) 실행코드 실행 -> 증감식 수행
// 조건식 결과 false가 될때까지 반복
for문의 실행 흐름이다.
실습 문제
(1)
package com.kh.control02.loop;
import java.util.Scanner;
public class A_For {
public void method1() {
// 1부터 5까지 출력
for (int i = 0; i <= 8; i++) {
System.out.println(i + "번째 반복문 수행");
}
}
}
for문을 이용하여 1 ~ 8까지 의 숫자를 반복한 것이다.
package com.kh.control02.run;
import com.kh.control02.loop.A_For;
public class Run {
public static void main(String[] args) {
A_For af = new A_For();
af.method1();
}
}
실행 결과는 이렇게 나온다.
0번째 반복문 수행
1번째 반복문 수행
2번째 반복문 수행
3번째 반복문 수행
4번째 반복문 수행
5번째 반복문 수행
6번째 반복문 수행
7번째 반복문 수행
8번째 반복문 수행
(2)
public void method3() {
// 1에서 10사이의 홀수만 출력
for (int i = 1; i <= 10; i += 2) {
System.out.println("출력값 : " + i);
}
}
출력 값 : 1
출력값 : 3
출력값 : 5
출력값 : 7
출력값 : 9
(3)
public void method4() {
// 정수를 하나 입력받아 그 수가 1~9 사이의 수일때만
// 그 수의 구구단 출력
// 조건이 맞지 않으면
// "1~9 사이의 양수를 입력하여야 합니다" 출력
Scanner sc = new Scanner(System.in);
System.out.println("정수를 입력하시오 :");
int num = sc.nextInt();
if (num >= 1 && num <= 9)
for (int i = 1; i < 10; i++) {
System.out.printf("%d * %d = %d\n", num, i, (num * i));
}
else {
System.out.println("1~9사이의 양수를 입력하시오");
}
}
정수를 입력하시오 : 5
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45
(4)
public void method5() {
// 키보드로 정수 두개를 입력받아 작은 수부터 큰수까지의 모든 정수의 합
Scanner sc = new Scanner(System.in);
int sum = 0;
System.out.println("첫 번째 정수 입력 :");
int num1 = sc.nextInt();
System.out.println("두 번째 정수 입력 :");
int num2 = sc.nextInt();
// for (int i = num1; i<= num2; 1++) {
// sum += i;
//
// }
// System.out.printf("");
int max = 0; // 입력값 중 큰 값을 저장할 변수
int min = 0; // 입력값 중 작은 값을 저장할 변수
// if-else 문을 이용하여 입력값을 비교하여 알맞는 변수에 저장
if (num1 > num2) {
max = num1;
min = num2;
} else if (num1 < num2) {
max = num2;
min = num1;
} else {
System.out.println("같은 수를 입력 할 수 없습니다.");
return;
}
for (int i = min; i <= max; i++) {
sum += i;
System.out.printf("%d에서 %d까지의 합 : %d\n", min, max, sum);
}
}
첫 번째 정수 입력 :
10
두 번째 정수 입력 :
5
5에서 10까지의 합 : 5
5에서 10까지의 합 : 11
5에서 10까지의 합 : 18
5에서 10까지의 합 : 26
5에서 10까지의 합 : 35
5에서 10까지의 합 : 45
만약 같은 수를 입력을 하면 이런 결과가 출력된다.
첫 번째 정수 입력 :
3
두 번째 정수 입력 :
3
같은 수를 입력할 수 없습니다.
(5)
public void method7() {
// 중첩 for문 예시
// 1부터 5까지 출력되는 문장을 5줄 출력
// 12345 11111
// 12345 22222
// 12345 33333
// 12345 44444
// 12345 55555
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5; j++) {
System.out.print(j); // j <-> i
}
System.out.println();
}
}
12345
12345
12345
12345
12345
(6)
public void method8() {
// 0시 0분 부터 23시 59분 까지 출력
for (int hour = 0; hour < 24; hour++) {
for (int min = 0; min < 60; min++) {
System.out.printf("%2d시 %2d분\n", hour, min);
}
}
}
0시 0분
0시 1분
0시 2분
0시 3분
0시 4분
0시 5분
.
.
.
.
23시 54분
23시 55분
23시 56분
23시 57분
23시 58분
23시 59분
(7)
public void method9() {
// 한 줄에 별 표(*)가 5번 출력 되는데
// 그 줄은 사용자가 입력한 수만큼 출력
// *****
// *****
// *****
Scanner sc = new Scanner(System.in);
System.out.println("출력할 줄 수 :");
int row = sc.nextInt();
for (int r = 1; r <= row; r++) {
// 한 줄아 '*' 문자 5번 출력
for (int c = 1; c <= 5; c++) {
System.out.print("*");
}
System.out.println();
}
}
출력할 줄 수 :
3
*****
*****
*****
(8)
public void method10() {
// 한 줄에 별표문자를 입력된 줄 수와 칸 수 만큼 출력
// 단, 줄수와 칸수가 일치하는 위치에는 줄 번호에 대한 정수가 출력
// 1*****
// *2****
// **3***
// ***4**
// ****5*
// *****6
Scanner sc = new Scanner(System.in);
System.out.println("출력 할 줄 수 : ");
int row = sc.nextInt();
System.out.println("출력 할 칸 수 : ");
int col = sc.nextInt();
for (int r = 1; r <= row; r++) {
for (int c = 1; c <= col; c++) {
if (r == c) {
System.out.print(r);
} else {
System.out.print("*");
}
}
System.out.println();
}
}
출력 할 줄 수 :
5
출력 할 칸 수 :
5
1****
*2***
**3**
***4*
****5
(9)
public void method11() {
// 0.0 ~ 1.0 사이의 실수 난수 구하기
for (int i = 1; i <= 20; i++) {
System.out.println(Math.random());
}
// 1 ~ 10 까지의 정수로 난수 구하기
for (int i = 1; i <= 20; i++) {
int n = (int) (Math.random() * 10 + 1); // 1을 더해줘야 1~10 // 원래 0~9
System.out.println(n);
}
}
public void method12() {
// 1부터 10 사이의 임의의 난수를 정해 1부터 난수까지의 정수 합계
int n = (int) (Math.random() * 10 + 1);
int sum = 0;
for (int i = 1; i <= n; i++) {
// sum += i; //// ???????????????????
sum = sum + i;
}
System.out.printf("1부터 %d까지 정수 합계 : %d", n, sum);
}
Math.random() 메서드에 대해 설명을 하면, 이 메서드는 0.0과 1.0 사이에 속하는 double 타입의 난수 하나를 리턴한다.
이때 0.0은 범위에 포함되고 1.0은 포함되지 않는다. 이것을 비교 연산자로 표현해보면 다음과 같다.
0.0 <= Math.random() < 1.0
응용을 할 수 있다. 1 ~ 10 사이의 정수 중에서 하나의 정수를 얻기 위해 각 변에 10을 곱하면 다음과 같은 범위에
속하는 하나의 double 타입의 값을 얻을 수 있다.
0.0 * 10 <= Math.random() * 10 < 1.0 * 10 ( 0.0 <= Math.random() * 10 < 10.0)
이 상태에서 각 변을 int타입으로 강제 타입 변환하면 다음과 같다.
(int) 0.0 <= (int)(Math.random() * 10) < (int) 1.0 * 10 ( 0 <= (int)(Math.random() * 10 < 10 )
'이공계전문기술연수 > Java' 카테고리의 다른 글
<이공계전문기술연수> 13. 참조 타입 / 참조 변수 (0) | 2019.08.15 |
---|---|
<이공계전문기술연수> 12. Java 반복문: while문 / break문 (0) | 2019.08.13 |
<이공계전문기술연수> 10. Java 조건문 switch문 (0) | 2019.08.11 |
< 이공계전문기술연수> 9. Java 조건문 if문 (0) | 2019.08.11 |
< 이공계전문기술연수> 8. Java 연산자 / 증감연산자/ 삼항연산자 (0) | 2019.08.07 |