반복문을 8시간에서 반복해서 배운다면..
역시 이해하는데 큰 어려움이 없지 않을까 하는 생각이다.
/*
* 자바에서 지원하는 반복문
* => 같은 소스가 여러번 코딩이 된 경우 사용 기술
* 1. while : 반복 횟수를 지정하지 않은 경우 (데이터베이스(오라클))
* 게시물, 레시피 목록, 영화 목록 etc ==> web
* 2. do~while : 한 번 이상을 반드시 반복하는 경우에 사용
* ================= 조건검색 (나중에)
* 3. for : 반복횟수가 지정된 경우
* =====
*
* 1) 순서 : while, for => 선조건건색, do~while => 후조건검색
* 2) 형식 :
* 1-1 while
* 초기값 int i = 1;
* while(조건문) => i<=10
* {
* 반복문장 System.out.println("i="+i);
* 증가식 i ++;
* }
* 1. 초기값 => 2. 초기값에 대한 조건검색 => 3. 반복문장 수행 => 4. 증가식
* => 증가된 값에 대한 조건섬색 => 3. 반복문장 수행 => 4. 증가식
* ==================
* true : 3=>4
* false : 종료
*
* *일정한 패턴이 있어야 반복문을 쓸 수 있음
* 3) 사용처
*/
public class 반목문 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("~반복문을 사용하지 않는 경우~");
System.out.println("i=1");
System.out.println("i=2");
System.out.println("i=3");
System.out.println("i=4");
System.out.println("i=5");
System.out.println("i=6");
System.out.println("i=7");
System.out.println("i=8");
System.out.println("i=9");
System.out.println("i=10");
System.out.println("~반복문을 사용하는 경우~");
int i = 1;
while (i<=10)
{
System.out.println("i="+i);
i++;
}
}
}
반복문을 사용하는 이유는 코드의 중복을 줄여주기 위해서
위에 쓴 예시 처럼 10줄을 써야하는 코드를 단 몇줄로 바꿔서 사용할 수 있다.
반복문의 문법으로는
1. while
2. do while
3. for
이렇게 세 가지가 있는데, 1,3 위주로 그리고 특히 for문 위주로 많이 봐야한다.
먼저 1. while
// 사용자가 단을 입력
import java.util.Scanner;
public class 반복문_while {
public static void main(String[] args) {
// TODO Auto-generated method stub
int dan;
// 사용자가 입력한 단을 받아서 저장
Scanner scan = new Scanner(System.in);
System.out.println("단(2~9) 입력:");
dan = scan.nextInt();
// 입력단의 구구단을 출력
// while을 사용하지 않고
System.out.println(dan+"단");
// 출력
System.out.printf("%d*%d=%d\n", dan,1,dan*1);
System.out.printf("%d*%d=%d\n", dan,2,dan*2);
System.out.printf("%d*%d=%d\n", dan,3,dan*3);
System.out.printf("%d*%d=%d\n", dan,4,dan*4);
System.out.printf("%d*%d=%d\n", dan,5,dan*5);
System.out.printf("%d*%d=%d\n", dan,6,dan*6);
System.out.printf("%d*%d=%d\n", dan,7,dan*7);
System.out.printf("%d*%d=%d\n", dan,8,dan*8);
System.out.printf("%d*%d=%d\n", dan,9,dan*9);
System.out.println("~반복문(While)사용~");
int i =1;
while(i<=9) {
System.out.printf("%d*%d=%d\n", dan, i, dan*i);
i++; // i<=9 i = 10 => false가 되면서 종료
}
}
}
while(조건문) { 실행문장} 의 형식으로 사용하는 문장이다.
조건문의 내용이 true이면 계속해서 돌아가도록 되어 있다.
다만 위의 예시처럼 i<=9로 조건을 달아주었다면, 꼭 i++을 써줘서 i가 하나씩 카운팅되서 올라가게끔 만들어줘야한다.
안그러면 무한 루프가 걸릴 수 있다.
// 1~100까지 합, 짝수합, 혹수 합
/*
* while 형식
* ========
* 초기값 ==> 시작 ====> int i=1
* while(조건식) ==> 끝 ====> i<=10
* {
* 반복문장 => 시작, 끝 지정된 갯수만큼 수행
* 증가식 i++;
* }
*
* 초기값 ==> 시작 ===> int i =10
* while(i>=1)
* {
* 반복문장
* 증감식 i--; 2개씩 => i+=2, 3개씩 => i+=3 ....
* }
*
* ====> while은 횟수가 없는 경우에 주로 사용
* while(true) => 무한루프
* {
* 종료 => break;
* }
*/
public class 반복문_while3 {
public static void main(String[] args) {
int sum=0, even=0, odd=0;
int i =1;
while (i<=100) {
sum+=i;
if(i%2==0) {
even=even+i;
}
else {
odd=odd+i;
}
i++;
}
System.out.println("전체합:"+sum);
System.out.println("짝수합:"+even);
System.out.println("홀수합:"+odd);
}
}
짝수와 홀수 합을 구해보는 연습을 했던 시간
과제처럼 즉석에서 했어야 했는데 생각대로 잘 나오지는 않고
나 말고 다른 사람들은 척척 만들어 내는거 같아 조금 풀이 죽었었다.
보면 이해는 바로 하는데 내가 직접 쓸려면 왜이리 헷갈리고 막막한 기분이 되는지 모르겠다.
많이 연습하면 달라지겠지
/*
* do~while : 조건검색을 나중에 하기 때문에 반드시 한번이상을 수행
* 형식)
* 초기값 int i =1; =====> 1
* do
* {
* 반복문장 =====> 2
* 증가식 ======> 3
* } while(조건식); ======> 4 =====> 2 ===> 3 ===> 4
* =============== 4 (false일 경우에 종료)
*
* int i = 1; ============= 1
* do{
* System.out.println("i="+i); i=1
* i++; i=2
* }while(i<=5); 2<=5 true
*/
public class 반복문_dowhile {
public static void main(String[] args) {
// 1. 초기값
int i =1;
do
{
// 2. 반복문으로 수행되는 문장
System.out.println("i="+i);
// i 값을 증가 i=1~i=10
i++;
} while (i<=5); {
int j =10; // 한번도 수행을 못할 수도 있다
while (j<=5) {
System.out.println("Hello");
}
}
}
}
do while과 while의 가장 큰 차이점은 전자는 무조건 한번 이상 수행문장을 지나친다는 점이다.
while의 조건이 더 아래에 있기 때문인데, do 안의 문장은 꼭 한번은 수행을 하고 내려오기 때문이다.
while 안에 있는 수행문은 한 번도 실행되지 않을 수 있다.
/*
* 1~100까지 총합, 3의 배수, 5의 배수, 7의 배수의 합을 출력
* 1-2+3-4+5-6+7-8+9-10 을 계산해서 총합을 구하기
*
*/
public class 반복문_dowhile3 {
public static void main(String[] args) {
int i = 1;
int sum=0, sum3=0, sum5=0, sum7=0;
do {
sum+=i;
i++;
if(i%3==0) {
sum3+=i;
}
if (i%5==0) {
sum5+=i;
}
if (i%7==0) {
sum7+=i;
}
}
while(i<=100);{
}
System.out.println("1~100까지 총합:"+sum);
System.out.println("1~100까지 3의배수합:"+sum3);
System.out.println("1~100까지 5의배수합:"+sum5);
System.out.println("1~100까지 7의배수합:"+sum7);
int j = 1;
int sum10=0, even=0, odd=0;
do {
sum10+=j;
if(j%2==0)
even-=j;
else
odd+=j;
j++;
}
while(j<=10);{
}
System.out.println("최종 계산 값:"+(odd+even));
}
}
두 예제 모두 수업시간에 과제 처럼 해본건데
위에 문제는 즉석에서 풀 수 있었고, 두번째 문제는 방금 적어봤는데 답이 잘 나왔다.
do while문에도 조금 익숙하다고 말할 수 있을거 같다
다음은 for문
/*
* for
* 1. 사용처 => 반복횟수가 지정된 경우에 주로 사용
* 2. while, do~while(1차) ==> for(2차 for)
* 3. for의 형식
* 1-1. 일반 for
* ① → ② ←④
* i=1 i<=10 i++
* 1부터 10까지 1씩증가 →←↑↓↗↘
* for(초기값; 조건식; 증가식)
* { ↓ true
* ③ ↗
* 반복수행문장
* }
*
* 실행 과정
* 초기값 => 조건식 (조건검색)
* = true : => 반복수행문장 => 초기값을 변경 (증가식)
* = false : for문을 종료
* 1-2. 향상된 for (JDK 1.5이상) => web (forEach구문)
* ========
* 1. 배열, 2. 컬렉션
* 1-3.
*/
public class 반복문_for {
public static void main(String[] args) {
// TODO Auto-generated method stub
// ☆ 홀수면 짝수면 ★
// ★★☆★★☆★★☆★★☆
for(int i=1; i<=9; i++) {
// //별을 10개 출력
// if(i%2==1) {
// System.out.println("☆"); // i가 홀수일 경우
// }
// else if (i%2==0){
// System.out.println("★");
// }
if(i%3==0) {
System.out.print("☆");
}
else {
System.out.print("★");
}
}
}
}
몇번 실행할지 for문에서 먼저 다 정해주고 {}안에 반복 수행문장이 있는 형태이다.
많이 익숙한 문법이라 듣고 이해하는데는 while이나 do while보다는 쉬웠다.
/*
* page 156
* 1. for은 주로 반복횟수를 알고 있는 경우에 적합
* 2. 형식
* 1 2 4
* for(초기값;조건식;증가식)
* 실행문장3
* 1->2->3->4
* 2->3->4
* 2->3->4
* ==
* false면 종료
* **** {}가 없으면 바로 밑있는 문장만 반복문장 된다
*
* 예)
* for(int i=1; i<=5; i++)
* System.out.println("i="+i);
* =================================
* System.out.println("Hello");
*
* for(int i=1; i<=5; i++)
* {
* System.out.println("i="+i);
* System.out.println("Hello");
* }
*
* 1. 초기화
* for(int i=0;
* ========
* => 프로그램에 맞게 초기화를 한다 (기본값, 0.1)
* => 자바는 보통 0
* 2. 조건식
* for(int i=0; i<=10;
* ======
* 반복을 몇번 할지 설정
* 3. 증감식
* for(int i=0;i<10; i++)
* ====
* i--, i+=2, i+=3....
*/
public class 반복문_for2 {
public static void main(String[] args) {
//A~Z
for(char alpha ='ㄱ'; alpha<='ㅏ'; alpha++) {
System.out.println(alpha);
}
System.out.println();//다음줄에 출력
//Z~A
for(char alpha='Z'; alpha>='A'; alpha--) {
System.out.print(alpha);
}
}
}
이렇게 굳이 조건문에 정수만 들어와야 하는건 아니고, char 데이터 형의 데이터들도 들어올 수 있다.
또는 얼마까지 수행해야할지 그 횟수를 모를때는
일부러 무한 루프를 생성하고, 조건이 달성됐을때 break를 걸어서 멈추게 하는 방법도 있었다.
public class 반복문_for3 {
public static void main(String[] args) {
// for(int i =1; i<=9; i++) {
// System.out.print(i);
// }
// System.out.println();
// for(int i=9; i>=1; i--) {
// System.out.print(i);
// }
int i=1;
for(;;) // while(true) 무한루프 => 종료하는 기능 설정
// 게임은 esc 눌렀을때 종료되어야 함
{
if(i>100)
break;
System.out.println("i="+i);
i++;
}
}
}
혹은 어떤 문장 하나만 건너 뛰고 그 다음 조건식을 확인하게 하는 방법도 있다.
// 3자리 정수를 입략하게 만든다
import java.util.Scanner;
public class 반복문_for4 {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
for(;;) //무한루프
{
System.out.print("세자리 정수를 입력하시오");
int user=scan.nextInt();
if(user<100 || user>999)
{
System.out.println("ㅉㅉ 알맞은 숫자를 입력하세요");
continue; // 이렇게 되면 조건식으로 다시 올라가게 함, continue || break 밑에는 코딩하면 안됨
}
int a=user/100;
int b=(user%100)/10;
int c=user%10;
System.out.println("백단위:"+a);
System.out.println("십단위:"+b);
System.out.println("단단위:"+c);
break; // 종료시켜버림
}
}
}
활용 형태는 이와 같이 다양해서, 실무에서 사용할때 어떤것을 어떻게 배치해서 사용할지 매치하는게 아마 가장 어려운 부분중에 하나가 되지 않을까 싶다.
아마 이 뒤부터는 더 어려워 질 것 같아서 정신을 단단히 붙잡고 수업을 들어야 할거 같다.
'programming > Gukbi' 카테고리의 다른 글
국비 교육 8일차 - 배열 (0) | 2021.01.05 |
---|---|
국비 교육 7일차 - 2차 for문 (0) | 2021.01.04 |
국비 교육 5일차 - 조건문 (0) | 2020.12.31 |
국비 교육 4일차 - 연산자, 제어문 (0) | 2020.12.28 |
국비 교육 3일차 - 연산자 (0) | 2020.12.26 |