티스토리 뷰
1. for
반복 횟수가 명확한 경우 사용. 특정 횟수만큼 반복
for (초기식; 조건식; 증감식){
//실행문 : 조건이 true일 동안 반복 실행
}
(1) for문
-type_1
int i;
for(i=1; i<=10; i++) {
System.out.println(i);
}
System.out.print("for end "+i+"\n");
└for문 바깥에서 선언된 변수 i는 for문 밖에서도 쓸 수 있음.
-type_2
초기식, 증감식 : 콤마(,)로 연결해서 여러 개 쓸 수 있음.
조건식 : 한 덩어리. 논리연산자 같은 걸로 묶어줌.
for(int j=1, k=1; (j+k)<10; j++, k++) {
System.out.println("j : "+j+", k : "+k+", j+k : "+(j+k));
}
└for문 안에서 선언된 변수는 for문 안에서만 유효함.
-type_3
조건식을 생략하면 무조건 true라 무한반복함.
for(;;) {
System.out.println("java");
}
(2) for-each문
values에 있는 값을 i에 할당. values의 값이 있는 동안 반복문 실행.
int[] values = {15, 43, 57, 20, 5, 64, 75, 94};
for(int i:values) {
System.out.println("values : "+i);
}
2. while
반복 횟수가 불특정할 때
초기식
while(조건식){
실행문;
증감식;
}
-type_1 : 기본
int i = 1;
int sum = 0;
while(i<=10) {
sum += i; //sum과 i의 값을 더해 sum에 대입
i++;
}
System.out.println(sum); // 55
-type_2 :
입력받은 소문자 알파벳을 대문자로 변환하여 출력. q가 입력되면 반복문 종료.
char ch1='a';
char ch2='A';
System.out.println((int)ch1); //97
System.out.println((int)ch2); //65 알파벳 대문자와 소문자는 32만큼 차이남.
System.out.println((char)(ch2+1)); // B
Scanner sc = new Scanner(System.in);
String str = "a";
while(!str.equals("q")) {
System.out.println("Enter alphabet");
str = sc.next();
char ch = str.charAt(0);
if(ch >= 'a' && ch <= 'z') {
System.out.println((char)(ch-32));
}else {
System.out.println(ch);
}
3. do-while
무조건 한번은 시행됨, 참(true), 거짓(false) 상관없이.
//do-while
int i = 10;
do{
System.out.println(i);
i++;
} while(i<10); // 10
//while
int j = 10;
while(i<10){
System.out.println(i);
i++;
} //아무 것도 출력 안 됨.
4. break
switch - case문 또는 반복문에서 사용
자신을 감싸고 있는 가장 가까운 반복문을 빠져나감.
int sum = 0;
for(int i=0; ; i++) { // 종료 조건 생략
sum += 1;
if(sum>100) break; // 종료 조건
System.out.println(sum);
}
└sum의 값이 100을 초과할 때 반복문 탈출(break)
5. continue
특정 조건에서는 수행하지 않고 건너뛰어야 할 때 사용.
바로 다음 실행문 스킵. 다음 반복문으로 넘어감(증가식 이동해 조건 검토한 후 실행문)
for(int i=1; i<100; i++) {
if(i%3==0){ //3으로 나누었을 때 나머지가 0(3의 배수)
continue;
}System.out.println(i);
}
└1 ~ 99까지 숫자 중 3의 배수는 제외하고 출력
6. 반복문 예제
(1) 1 ~ 100까지 합
int sum = 0;
for(int i=1; i<=100; i++) {
sum += i;
}
System.out.println(sum);
└변수 선언 후 초기화해줘야 이후에 값을 할당할 때 오류가 안 뜸.
초기화하지 않고 for문에서 할당(값 대입)하려고 했더니 오류 떴음.
(1-1) 1 ~ 100까지의 소수 출력
소수 : 1과 자기자신으로만 나뉘는 수
for(int i=2; i<=100; i++) { //잘못된 알고리즘
for(int j=2; j<=i; j++) {
if(i%j==0) {
System.out.println(i);
}
}
}
└12의 경우 2, 3, 4, 6으로도 나머지가 0이므로 전부 출력된다. 소수가 아닌 수도 출력되므로 잘못된 알고리즘.
for(int i=2; i<=100; i++) {
boolean flag = false;
for(int j=2; j<i; j++) {
if(i%j==0) {
//자기자신보다 작은 수에서 나누어지면 소수 x
flag = true;
break; //가장 가까운 반복문 탈출
}
} //for
if(flag) { // flag가 true면 continue로 실행문 스킵하고 반복문 증가식으로 돌아감.
continue;
}
System.out.print(i+" ");
}
└flag가 true면 자기 자신보다 작은 수에서 나누어진다. 소수가 아니다. 그러니까 출력되면 안 됨.
마지막 if문의 조건식에서 if(flag ==true)일 때 수를 출력하는 실행문을 스킵한다. 그런데 if(flag) 자체가 어떻게 if(flag==true)랑 똑같은 의미가 되는가? ==true를 적어주지 않았는데도.
아! 애초에 if문이 조건식이 true면 블록 안의 실행문 실행임.
처음 flag를 false로 둔 뒤, 소수가 아닌 수를 true라고 해서 참일 때, 출력문을 스킵하게 만들었음. 거짓이면 for문, if문 건너뛰어서 출력하게 된 거고.
(2) 5의 배수 덧셈
int sum3 = 0;
for(int i=0; i<=100; i++) {
if(i%5 == 0) {
sum3 += i;
}
}
System.out.println(sum3); //1050
//증가식에 조건
for(int i=0, sum=0; i<=100; i+=5){
sum += i;
System.out.println("i : "+i+", sum : "+sum);
}
(3) 짝수합, 홀수합
int eSum = 0;
int oSum = 0;
for(int i=1; i<=100; i++) {
if(i%2==0) {
eSum += i;
}else {
oSum +=i;
}
}
System.out.println("짝수 합 "+eSum); //2550
System.out.println("홀수 합 "+oSum); //2500
(4) 구구단 출력
2단부터 9단까지 출력
for(int i=2; i<10; i++) {
for(int j=1; j<10; j++) {
System.out.print(i+"*"+j+"="+(i*j)+" ");
}
System.out.println();
}
(5) 아래와 같은 표? 행렬? 만들기
| 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 |
for(int i=1; i<=5; i++) {
for(int j=i; j<(i+5); j++) {
System.out.print(j+" ");
}
System.out.println();
}
(6) 별의 개수 점점 증가, 감소
| * * * * * * * * * * * * * * * |
* * * * * * * * * * * * * * * |
//점점 증가
for(int i=1; i<=5; i++) {
for(int j=1; j<=i; j++) {
System.out.print("* ");
}
System.out.println();
}
//점점 감소
for(int i=5; i>0; i--) {
for(int j=i; j>0; j--) {
System.out.print("* ");
}
System.out.println();
}
//점점 감소_2
for(int i=0; i<10; i++){
for(int j=0; j<10-i; j++){
System.out.print("*");
}
System.out.println();
}
(7) 가운데 정렬 : 별의 개수 점점 증가, 감소, 다이아몬드형
| * * * * * * * * * * * * * * * * |
* * * * * * * * * * * * * * * * |
* * * * * * * * * * * * * * * * * * * * * * * * * |
for(int i=1; i<=4; i++) {
for(int j=1; j<=4-i; j++){
System.out.print(" ");
}
System.out.print("*");
System.out.println();
} // 별이 대각선으로 1개식만 출력...
//피라미드
for(int i=0; i<4; i++) {
for(int j=-4; j<=4; j++) {
if(j>=-i && j<=i) {
System.out.print("*");
}else {
System.out.print(" ");
}
}
System.out.println();
}
//역 피라미드
for(int i=4; i>0; i--){
for(int j=-4; j<=4; j++){
if(j>= i && j<= i){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
//다이아몬드
for(int i=-4; i<=9; i++){
for(int j- =4; j<=4; j++){
if(Math.abs(j) <= (9-(Math.abs(i)))){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
└피라미드의 정 가운데 0, 좌우 극점.
'수업 > └Java' 카테고리의 다른 글
| [CH05_2]참조 자료형 : String (0) | 2022.01.31 |
|---|---|
| [CH05_1]참조 자료형 : 배열(Array) (0) | 2022.01.31 |
| [CH04_1]조건문 실습 예제_책 (0) | 2022.01.30 |
| [CH04_01]제어문 : 조건문 (0) | 2022.01.30 |
| [CH03]연산자 (0) | 2022.01.30 |
- Total
- Today
- Yesterday
- selcetor
- 입력양식
- 변수
- html
- BAEKJOON
- typeof
- 기본선택자
- html layout
- CascadingStyleSheet
- text formatting
- ScriptTag
- empty-cell
- html input type
- border-spacing
- scanner
- A%B
- html atrribute
- html base tag
- Java
- 스크립태그
- html a tag
- improt
- 미디어 태그
- initialized
- 외부구성요소
- JavaScript
- caption-side
- html pre
- input type 종류
- css
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |