2.반복문 - for, while, do-while
2.1 for 문
for(초기값; 조건식; 증감값){
// 조건식인 참일 때 반복 수행 문장
}
package ch04;
class FlowEx12 {
public static void main(String[] args) {
for(int i=1;i<=5;i++)
System.out.println(i); // i의 값을 출력한다.
for(int i=1;i<=5;i++)
System.out.print(i); // println()대신 print()를 쓰면 가로로 출력된다.
System.out.println();
}
}
값 누적
package ch04;
class FlowEx13 {
public static void main(String[] args) {
int sum = 0; // 합계를 저장하기 위한 변수.
for(int i=1; i <= 10; i++) {
sum += i ; // sum = sum + i;
System.out.printf("1부터 %2d 까지의 합: %2d%n", i, sum);
}
} // main의 끝
}
for 에 사용하는 변수 활용
package ch04;
class FlowEx15 {
public static void main(String[] args) {
System.out.println("i \t 2*i \t 2*i-1 \t i*i \t 11-i \t i%3 \t i/3");
System.out.println("----------------------------------------------------");
for(int i=1;i<=10;i++) {
System.out.printf("%d \t %d \t %d \t %d \t %d \t %d \t %d%n", i, 2*i, 2*i-1, i*i, 11-i, i%3, i/3);
}
}
}
중첩 for 문
**********
**********
**********
**********
**********
package ch04;
class FlowEx16 {
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();
}
}
}
*
**
***
****
*****
******
*******
package ch04;
import java.util.*;
class FlowEx17 {
public static void main(String[] args) {
int num = 0;
System.out.print("*을 출력할 라인의 수를 입력하세요.>");
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine(); // 화면을 통해 입력받은 내용을 tmp에 저장
num = Integer.parseInt(tmp); // 입력받은 문자열(tmp)을 숫자로 변환
for(int i=0;i<num;i++) {
for(int j=0;j<=i;j++) {
System.out.print("*");
}
System.out.println();
}
} // main의 끝
}
구구단
package ch04;
class FlowEx18 {
public static void main(String[] args) {
for(int i=2;i<=9;i++) {
for(int j=1;j<=9;j++) {
System.out.printf("%d x %d = %d%n", i, j, i*j);
}
}
}
}
중첩시 반복문 수행 순서 확인
package ch04;
class FlowEx19 {
public static void main(String[] args) {
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
for(int k=1;k<=3;k++)
System.out.println(""+i+j+k);
}
}
2차원 행렬 위치 찍기
package ch04;
class FlowEx20 {
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]
[2,2]
[3,3]
[4,4]
[5,5]
package ch04;
class FlowEx21 {
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();
}
}
}
향상된 for 문
- JDK1.5 부터 배열과 컬렉션에 저장된 요소에 접근시 기존보다 편리
for(타입변수명 : 배열 또는 컬렉션){
반복할 문장;
}
package ch04;
class FlowEx22 {
public static void main(String[] args) {
int[] arr = {10,20,30,40,50};
int sum = 0;
for(int i=0;i<arr.length;i++) {
System.out.printf("%d ", arr[i]);
}
System.out.println();
for(int tmp : arr) {
System.out.printf("%d ", tmp);
sum += tmp;
}
System.out.println();
System.out.println("sum="+sum);
}
}
2.2 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++; // 증감식
}
// 무한 반복
for(;;;){ // 조건식이 없어도 됨
}
while(){ // 조건식이 없으면 컴파일 에러
}
//무한 반복
while(true){
}
감소(증가) 연산자로 조건 처리
package ch04;
class FlowEx23 {
public static void main(String[] args) {
int i= 5;
while(i--!=0) {
System.out.println(i + " - I can do it.");
}
}
}
각자리수의 합 구해보기
- 12345 % 10 // 5
- 12345 / 10 // 1234
package ch04;
import java.util.*;
class FlowEx25 {
public static void main(String[] args) {
int num = 0;
int sum = 0;
System.out.print("숫자를 입력하세요.(예:12345)>");
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine(); // 화면을 통해 입력받은 내용을 tmp에 저장
num = Integer.parseInt(tmp); // 입력받은 문자열(tmp)을 숫자로 변환
while(num!=0) {
// num을 10으로 나눈 나머지를 sum에 더함
sum += 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);
}
}
합계를 구할 숫자를 입력하세요(끝내려면 0을 입력)
>>100
>>200
>>300
>>0
합계:600
package ch04;
import java.util.*;
class FlowEx27 {
public static void main(String[] args) {
int num;
int sum = 0;
boolean flag = true; // while문의 조건식으로 사용될 변수
System.out.println("합계를 구할 숫자를 입력하세요.(끌내려면 0을 입력)");
while(flag) { // flag의 값이 true이므로 조건식은 참이 된다.
System.out.print(">>");
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine();
num = Integer.parseInt(tmp);
if(num!=0) {
sum += num; // num이 0이 아니면, sum에 더한다.
} else {
flag = false; // num이 0이면, flag의 값을 false로 변경.
}
} // while문의 끝
System.out.println("합계:"+ sum);
}
}
2.3 do-while 문
- while문의 변형으로 최소한 한번은 실행
do{
// 한번 실행 후 조건식이 참이면 계속 수행
}while(조건식);
임의수 숫자 맞추기
package ch04;
import java.util.*;
class FlowEx28 {
public static void main(String[] args) {
int input = 0;
int answer = 0;
answer = (int)(Math.random() * 100) + 1; // 1~100사이의 임의의 수를 저장
Scanner scanner = new Scanner(System.in);
do {
System.out.print("1과 100사이의 정수를 입력하세요.>");
String tmp = scanner.nextLine();
input = Integer.parseInt(tmp);
if(input > answer) {
System.out.println("더 작은 수로 다시 시도해보세요.");
} else if(input < answer) {
System.out.println("더 큰 수로 다시 시도해보세요.");
}
} while(input!=answer);
System.out.println("정답입니다.");
}
}
2.4 break 문
- 자신이 포함된 가장 가까운 반복문 탈출
- 주로 if문과 사용되어 특정 조건을 만나면 반복문 탈출
package ch04;
class FlowEx30 {
public static void main(String[] args) {
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);
}
}
2.5 continue 문
- for문에서 continue를 만나면 증감식으로, while 문의 경우는 조건식으로 이동
package ch04;
class FlowEx31 {
public static void main(String[] args) {
for(int i=0;i <= 10;i++) {
if (i%3==0)
continue;
System.out.println(i);
}
}
}
이전글
'JAVA > 조건문과 반복문' 카테고리의 다른 글
조건문과 반복문_2 (0) | 2018.08.14 |
---|---|
조건문과 반복문_1 (1) | 2018.08.14 |