반복문은 어떤 작업이 반복적으로 수행되도록 할 때 사용되며, 반복문의 종류로는 for문과 while 문 while문의 번형인 do-while문이 있다.
1. for문의 구조와 수행순서
for 문은 초기화, 조건식, 증감식, 블럭 부분 모두 4부분으로 이루어져 있다. 조건식이 참인 동안 블럭 내의 문장들을 반복하다가 false가 되면 반복문을 탈출하게 된다.
for(초기화;조건식:증감식){
//조건식이 참일 때 수행되어야 하는 식을 기입한다.
}
초기화가 1번으로 이뤄지고 조건식이 2번으로 수행되고 3번으로는 조건식이 참일 때 수행 되어야 하는 식이 진행이 된다. 그 후 증감식이 수행이 된다.
public class Main {
public static void main(String[] args) {
//숫자 출력하기
for(int i=1; i<6; i++){
System.out.println(i);
}
for(int j=1; j<6; j++){
System.out.print(j);
}
}
}
public class Main {
public static void main(String[] args) {
//숫자들의 합을 구하기
int sum=0;
for(int i=1; i<11; i++){
sum+=i;
System.out.printf("1부터 %d까지의 합은 %d이다.\n", i, sum);
}
}
}
public class Main {
public static void main(String[] args) {
//숫자 순서대로 출력하기
for(int i=1, j=10; i<=10; i++,j--){
System.out.printf("%d\t%d\n", i, j);
}
}
}
2. 중첩for문
중첩의 횟수는 상관이 없다.
public class Main {
public static void main(String[] args) {
//별찍기
for(int i=1; i<=5; i++){
for(int j=1; j<=10; j++){
System.out.print("*");
}
System.out.println();
}
}
}
**********
**********
**********
**********
**********
public class Main {
public static void main(String[] args) {
//반삼각형 모양으로 별찍기
for(int i=1; i<=5; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
*
**
***
****
*****
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//출력할 라인의 수만큼 별찍기
System.out.print("출력할 라인의 수를 입력하세요 : ");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
for(int i=1; i<=num; i++){
for(int j=1; j<=i; j++){
System.out.print("*");
}
System.out.println();
}
}
}
출력할 라인의 수를 입력하세요 : 7
*
**
***
****
*****
******
*******
public class Main {
public static void main(String[] args) {
//숫자 표 출력하기
for(int i=1; i<=5; i++){
for(int j=1; j<=5; j++){
System.out.printf("[%d,%d]", i, j);
}
System.out.println();
}
}
}
[1,1][1,2][1,3][1,4][1,5]
[2,1][2,2][2,3][2,4][2,5]
[3,1][3,2][3,3][3,4][3,5]
[4,1][4,2][4,3][4,4][4,5]
[5,1][5,2][5,3][5,4][5,5]
public class Main {
public static void main(String[] args) {
//숫자 표 출력하기에서 숫자 같은 것만 남겨두고 출력하기
for(int i=1; i<=5; i++){
for(int j=1; j<=5; j++){
if(i==j){
System.out.printf("[%d,%d]", i, j);
}else{
System.out.printf("%5c", ' ');
}
}
System.out.println();
}
}
}
[1,1]
[2,2]
[3,3]
[4,4]
[5,5]
3. 향상된 for 문
for(타입 변수명 : 배열 또는 컬렉션){
//반복할 문장
}
위에 처럼 타입은 배열 또는 컬렉션의 요소의 타입이어야 한다. 배열 또는 컬렉션에 저장된 값이 매 반복마다 하나씩 순서대로 읽혀서 변수에 저장이 된다.
아래와 같은 배열을 선언 했다고 하자, 이 배열의 모든 요소를 출력하는 for문은 이러하다.
int[] array={1,2,3,4,5};
1.기존의 for문을 사용하는 경우
for(int i=0; i<array.length; i++){
System.out.println(array[i]);
}
2.향상된 for문을 사용하는 경우
for(int tmp : array ){
System.out.println(tmp);
}
public class Main {
public static void main(String[] args) {
//중첩된 for문을 사용하는 경우
int[] array={1,2,3,4,5};
for(int i=0; i<array.length; i++){
System.out.println(array[i]);
}
System.out.println("----------구분선입니다-----------");
for(int tmp : array){
System.out.println(tmp);
}
}
}
1
2
3
4
5
----------구분선입니다-----------
1
2
3
4
5
4. while문
while문은 조건식이 true인 동안, 즉 조건식이 거짓이 될 때까지 블럭 내의 문장을 반복한다.
while(조건식){
//조건식의 연산결과가 참(true)인 동안, 반복될 문장들을 적는다.
}
while문은 먼저 조건식을 평가해서 조건식이 거짓이면 문장 전체를 벗어나고, 참이면 블럭{}내에 문장을 수행하고 다시 조건식으로 돌아간다. 조건식이 거짓이 될 때까지 이 과정이 반복이 된다.
for문 while문 비교
//초기화, 조건식, 증감식
for(int i=1; i<=10; i++){
System.out.println(i);
}
int i=1; //초기화
while(i<=10) { //조건식
System.out.println(i);
i++ //증감식
}
while 문의 조건식은 생략할 수 없다.
public class Main {
public static void main(String[] args) {
//while문 사용 예제
int i=5;
while(i--!=0){
System.out.println(i);
}
}
}
4
3
2
1
0
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//사용자로 부터 숫자를 입력받고, 이 숫자의 가가 자리의 합을 구하는 예제
int num=0, sum=0;
System.out.print("숫자를 입력하세요. ");
Scanner scanner = new Scanner(System.in);
num = scanner.nextInt();
while(num!=0) {
//num을 10으로 나눈 나머지를 sum에 더함
sum += num%10;
System.out.printf("sum=%3d num=%d%n", sum, num);
num/=10; //num = num/10; num을 10으로 나눈 값을 다시 num에 저장을 하겠다.
}
System.out.println("각 자리수의 합 : "+sum);
}
}
숫자를 입력하세요. 12345
sum= 5 num=12345
sum= 9 num=1234
sum= 12 num=123
sum= 14 num=12
sum= 15 num=1
각 자리수의 합 : 15
public class Main {
public static void main(String[] args) {
int sum=0;
int i=0;
//i를 1씩 증가시켜서 sum에 계속해서 더한다.
while((sum+=++i) <= 100 ) {
System.out.printf("%d - %d%n", i, sum);
}
}
}
1 - 1
2 - 3
3 - 6
4 - 10
5 - 15
6 - 21
7 - 28
8 - 36
9 - 45
10 - 55
11 - 66
12 - 78
13 - 91
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int sum=0;
boolean flag = true;
Scanner sc = new Scanner(System.in);
System.out.println("합계를 구하려는 숫자를 입력하세요. 끝내려면 0을 입력");
while(flag) {
System.out.print(">>");
int num = sc.nextInt();
if(num!=0){
sum +=num;
}else {
flag = false;
}
}
System.out.println("합계:" + sum);
}
}
합계를 구하려는 숫자를 입력하세요. 끝내려면 0을 입력
>>100
>>200
>>300
>>400
>>0
합계:1000
5. do-while문
do-while문은 while문의 번형으로 기본적인 구조는 while문과 같으나 조건식과 블럭의 순서를 바꿔놓은 것이다.
while문과 반대로 블럭을 먼저 수행한 후에 조건식을 평가한다.
그렇기 때문에 while문은 조건식의 결과에 따라 블럭이 한 번도 수행되지 않을 수 있지만, do-while문은 최소한 한번은 수행될 것으로 보장한다.
do {
//조건식의 연산결과가 참일 때 수행될 문장들을 적는다.
}while (조건식); //항상 뒤에 ;이것을 까먹지 않도록 해야한다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//do-while 예제
int input=0, answer=0;
answer = (int)(Math.random()*100)+1; //1~100 사이의 임의의 수를 저장
Scanner sc = new Scanner(System.in);
do {
System.out.print("1과 100 사이의 정수를 입력하세요.> ");
input = sc.nextInt();
if(input>answer){
System.out.println("더 작은 수로 다시 시도해 보세요.");
}else if(input<answer){
System.out.println("더 큰 수로 다시 시도해보세요");
}
}while(input!=answer);
System.out.println("정답입니다.");
}
}
1과 100 사이의 정수를 입력하세요.> 2
더 큰 수로 다시 시도해보세요
1과 100 사이의 정수를 입력하세요.> 55
더 큰 수로 다시 시도해보세요
1과 100 사이의 정수를 입력하세요.> 80
더 큰 수로 다시 시도해보세요
1과 100 사이의 정수를 입력하세요.> 90
더 작은 수로 다시 시도해 보세요.
1과 100 사이의 정수를 입력하세요.> 88
더 작은 수로 다시 시도해 보세요.
1과 100 사이의 정수를 입력하세요.> 84
더 큰 수로 다시 시도해보세요
1과 100 사이의 정수를 입력하세요.> 86
정답입니다.
public class Main {
public static void main(String[] args) {
//do-while 예제(3,6,9 게임 출력하기)
for(int i=1; i<=100; i++){
System.out.printf("i=%d", i);
int tmp = i;
do{
//tmp%10이 3의 배수인지 확인(0 제외)
if(tmp%10%3==0 && tmp%10!=0)
System.out.print("짝");
//tmp /= 10 tmp = tmp /10과 동일
}while((tmp/=10)!=0);
System.out.println();
}
}
}
i=38짝
i=39짝짝
i=40
i=41
i=42
i=43짝
i=44
i=45
i=46짝
6. break문
자신이 포함된 가장 가까운 반복문을 벗어난다.
public class Main {
public static void main(String[] args) {
//숫자를 1부터 계속 더해 나가서 몇까지 더하면 합이 100을 넘는지 알아내는 예제이다.
int sum=0;
int i=0;
while(true){
if(sum>100)
break;
++i;
sum +=i;
}//end of while
System.out.println("i=" + i);
System.out.println("sum=" + sum);
}
}
i=14
sum=105
7.continue문
continue문은 반복문 내에서만 사용될 수 있으며, 반복이 진행되는 도중에 continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어간다.
for문의 경우 증감식으로 이동하며, while문과 do-while문의 경우 조건식으로 이동한다.
public class Main {
public static void main(String[] args) {
for(int i=0; i<=10; i++){
if(i%3==0)
continue;
System.out.println(i);
}
}
}
1
2
4
5
7
8
10
'프로그래밍 > Java(자바)' 카테고리의 다른 글
자바 복습하기 : 참조타입과 참조변수 (1) | 2023.12.08 |
---|---|
[백준] 10757번 큰 수 A+B --java (0) | 2023.12.07 |
[백준] 10951번 A+B - 4 --java (0) | 2023.12.07 |
1/26일 자바1일차 공부 정리본 (0) | 2023.01.26 |
1. Java란? (0) | 2023.01.26 |