package c_sentence;
public class Sentence02 {
public static void main(String[] args) {
/* 1. 반복문
- for. while, do-while
- 어떤 작업이 반복적으로 수행되도록 할때 사용된다
- 반복문은 주어진 조건이 만족하는 동안 주어진 문장을 반복적으로 수행한다
- for 문은 주고 반복횟수를 알고 있을때,
- while 문은 반복횟수를 모를때 사용한다 (종착지를 모를때)
2.for
- 기본구조
for( 값을 처음으로 입력 ; 조건식 ; 증감식 ){
//1 //2, 4, 7, 10 //3, 6, 9 - 반복문이니까
조건식이 true일때 실행되는 문자 ;
//3, 5, 8
} //11 조건식이 true일때 밖으로 */
// 예제1) 0 부터 100을 출력하시오
System.out.println(0);
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
System.out.println(6);
System.out.println(7);
System.out.println(8);
System.out.println(9);
System.out.println(10);
System.out.println(11);
System.out.println(12);
System.out.println(13);
System.out.println(14);
System.out.println(15);
System.out.println(16);
System.out.println(17);
System.out.println(18);
System.out.println(19);
System.out.println(20);
System.out.println(31);
System.out.println(32);
System.out.println(33);
System.out.println(34);
System.out.println(35);
System.out.println(36);
System.out.println(37);
System.out.println(38);
System.out.println(39);
System.out.println(40);
System.out.println(41);
System.out.println(42);
System.out.println(43);
System.out.println(44);
System.out.println(45);
System.out.println(46);
System.out.println(47);
System.out.println(48);
System.out.println(49);
System.out.println(50);
System.out.println(41);
System.out.println(42);
System.out.println(43);
System.out.println(44);
System.out.println(45);
System.out.println(46);
System.out.println(47);
System.out.println(48);
System.out.println(49);
System.out.println(50);
System.out.println(51);
System.out.println(52);
System.out.println(53);
System.out.println(44);
System.out.println(45);
System.out.println(46);
System.out.println(47);
System.out.println(48);
System.out.println(49);
System.out.println(50);
System.out.println(41);
System.out.println(42);
System.out.println(43);
System.out.println(44);
System.out.println(45);
System.out.println(46);
System.out.println(47);
System.out.println(48);
System.out.println(49);
System.out.println(50);
System.out.println(51);
System.out.println(52);
System.out.println(53);
System.out.println(54);
System.out.println(55);
System.out.println(56);
System.out.println(57);
System.out.println(58);
System.out.println(59);
System.out.println(60);
System.out.println(61);
System.out.println(62);
System.out.println(63);
System.out.println(64);
System.out.println(65);
System.out.println(66);
System.out.println(67);
System.out.println(68);
System.out.println(69);
System.out.println(70);
System.out.println(71);
System.out.println(72);
System.out.println(73);
System.out.println(74);
System.out.println(75);
System.out.println(76);
System.out.println(77);
System.out.println(78);
System.out.println(79);
System.out.println(80);
System.out.println(81);
System.out.println(82);
System.out.println(83);
System.out.println(84);
System.out.println(85);
System.out.println(86);
System.out.println(87);
System.out.println(88);
System.out.println(89);
System.out.println(90);
System.out.println(91);
System.out.println(92);
System.out.println(93);
System.out.println(94);
System.out.println(95);
System.out.println(96);
System.out.println(97);
System.out.println(98);
System.out.println(99);
System.out.println(100);
// 예제2) 반복문을 사용하여 0 부터 100을 출력하시오
//값만 바뀐다
//시작 0, 끝 100, 증가량 1
for(int i =0; i<101; i++){ //int i는 지역변수
System.out.println("System.out.println("+i+")");
}
// 예제3) 5 부터 15 까지의 합계를 구하시오
int sum = 0;
sum+=6; //sum = sum+6;
sum+=7;
sum+=8;
sum+=9;
sum+=10;
sum+=11;
sum+=12;
sum+=13;
sum+=14;
sum+=15;
// 예제4) 반복문을 사용하여 5 부터 15 까지의 합계를 구하시오
//**나의 풀이
//5~15 = 5<= x <16 @11 가지
//합계를 구하시오 = int sum = sum + x
// 5 +6+7+8+9+10+11+12+13+14+15
int sum = 5; // 합계는 5부터 시작
for( x = 0 ; x<11 ; x++){ // 연속해서 11번 증가하며 더함
sum = sum + x ; // 합에 더한 수와 이전 합을 더함
}
int sum = 5; // 합계는 5부터 시작
for(int x=6 ; x<16 ; x++){ // 5이후 6부터 15까지 더해주기위한 변수 및 범위 선언
sum = sum + x; // 초기 값 + 증가하는 변수들과의 합
}
// 예제5) 5 부터 15 까지의 짝수들의 합계를 구하시오
//**나의 풀이
//5~15 = 5<= x <16 @11 가지
//짝수들 = x%2==0
//합계를 구하시오 = int sum = sum + x
//5+6+7+8+9+10+11+12+13+14+15
int sum = 0; // 합계는 5부터 시작 <-- 짝수라는 조건에 부합 X
for(int x=5 ; x<16 ; x++){ // 5이후 6부터 15까지 더해주기위한 변수 및 범위 선언
if( x%2==0 ){
sum = sum + x; // 초기 값 + 증가하는 변수들과의 합
}
}
System.out.println(sum);
//for(int i=5 ; i%2==0||i<16 ; i++){
// i는 5~15까지 변하는 수 //여기에 넣을 수 없나
int sum = 0; for(int i=6 ; i<16 && i%2==0 ; i++){ // i<16 && i%2==0 //16보다 작고 짝수 // -> x 홀수가 나오자 마자 밖으로 튕 // i<16 || i%2==0 //16보다 작거나 짝수 // -> x 홀수여도 안으로 연산 sum = sum + i; }
/* 3. while문
- 반복 횟수를 모를 때
- 반복 횟수를 알 때
- 조건식과 수행해야 할 { }만으로 구성되어 있다
- 기본구조
while(조건식//t or f){
수행될 문장
} */
for (int i = 0 ; i < 10 ; i++) {
System.out.println("for = " + i);
}
=
int i= 0; //밖에서 초기화,
while(i < 10){ //안에서(조건식, 수행, 조건식, 수행, 조건식,.....)
System.out.println("while = " + i);
i++;
}
// 예제6) 23 부터 1092 까지의 합계를 구하시오
int sum = 0; // <-- 내가 가장 납득이 안되는, 습관적으로 따라하고 있는 부분
// 내가 초기화 한 합계에 대한 변수인데 왜 '0'으로 선언해야 하나?
for(int i=23 ; i<1093 ; i++){ //23<=i<1093
sum = sum + i;
}
System.out.println(sum);
// 예제6) 23 부터 1092 까지의 숫자들 중 3의 배수들의 합계를 구하시오
//방법1) for 문으로
int sum = 0;
for(int i=23 ; i<1093 ; i++){ //23<=i<1093
if(i%3==0){ // 일단 들어 오고나서, 3의 배수 구분 해줄 수 있으니까..
// 앞에 했던 (초기화 ; 조건식; 증감식)방식에 무리가 있던거 같아
sum=sum + i;
}
}
System.out.println(sum);
//방법2) while 문으로
//시도1)
int sum = 0; // 합계를 담을 변수 선언 및 초기화
int i = 23; //반복문(while)에서 반복시킬 변수 선언 및 초기화
while( i<1093 && i%3==0){ //while에서 반복시킬 변수가 돌아가는 조건
//-> 조건 자체가 맞긴한데
// 두 조건을 동시에 만족시키면 들어가는 것 자체가 문제
// 걸름망 과정이 한번 더 필요
sum=sum+i; //조건을 만족하고 들어온, 반복하는 변수를 통해
//구연하고자 하는 바
i++; // 변화하여 반복되는 변수를 위한 증감식
}
System.out.println(sum);
//시도2)
int sum = 0; // 합계를 담을 변수 선언 및 초기화
int i = 23; //반복문(while)에서 반복시킬 변수 선언 및 초기화
while( i<1093){ //반복시킬 조건 1) 숫자 범위
if( i%3==0){ //반복시킬 조건 2) 숫자 중 3의 배수
sum=sum+i; //구연하고자 하는 바
i++; // 변화하여 반복되는 변수를 위한 증감식
}
}
System.out.println(sum);
// 디버그가 고장 난줄 앎
// 끝이 안남 ?? 무한이 반복되나? //생각없이 따라간 것 같다...
// 보니까... 23의 경우 계속 그 값 그대로 순환하네....
//앞으로 반복문을 쓸때는 조건이 안 맞는 경우를 바로 대입해봐야 겠다
//시도3)
int sum = 0; // 합계를 담을 변수 선언 및 초기화
int i = 23; //반복문(while)에서 반복시킬 변수 선언 및 초기화
while( i<1093){ //반복시킬 조건 1) 숫자 범위
if( i%3==0){ //반복시킬 조건 2) 숫자 중 3의 배수
sum=sum+i; //구연하고자 하는 바
}
i++; // 변화하여 반복되는 변수를 위한 증감식
// 두번째 조건이 맞지 않을 경우에 바로 튕-이 아니라
// 다른 수로 바꿔서 대입할 수 있도록
//첫번째 조건 블록 안에 기입
}
System.out.println(sum);
//ok 그럼 다른 방법은?)
// ok 시도 1)
//계속해서 맘에 안들었던...
//조건 절을 포함한 반복문 안에 조건문을 넣는 것...?
int sum = 0; // 합계를 담을 변수 선언 및 초기화
int i = 23; //반복문(while)에서 반복시킬 변수 선언 및 초기화
while( i<1093){ //반복시킬 조건 1) 숫자 범위
sum = (i%3==0)? sum+i : i++;
}
System.out.println(sum);
//이번에도 먹통... 디버그를 돌려본다.... 어? 잘 돌아가네~ 싶었는데...
//... i 가 안돌아 간다
//그르네...두번째 조건이 맞았을 경우, 반복문 변수를 증가시키질 않고 있네...
// 주의 사항 하나 더 추가 !
// 조건식을 쓸때는 반복문 변수의 증감 상태를 확인해야겠네
//정리 반복문을 쓸때는
// 반복문의 1)조건식이 false일 경우에 대한
// 2) 조건식의 true, false 를 떠나, 반복문용 변수의 증감상태 검토가 필요하다
// ok 시도 2)
int sum = 0; // 합계를 담을 변수 선언 및 초기화
int i = 23; //반복문(while)에서 반복시킬 변수 선언 및 초기화
while( i<1093){ //반복시킬 조건 1) 숫자 범위
sum = (i%3==0)? sum+i : i++;
i++;
}
System.out.println(sum);
//... 양쪽 값 둘다 돌아가는 거 같았는데... 뭐지 값이 오르락 내리락 하다가
// 뱅뱅도네???
n) '
//잘 나오나 싶었는데..
n+1)
// 값이 갑짜기 떨어지...
// 이번엔 " i++ ;" 이 부분을 생각없이 따라간 것 같다...
// (i%3==0)가 참인 경우, sum = sum+i 실행 ok
// (i%3==0)가 거짓인 경우, sum = i++
// 이건.. 변수의 값을 sum에 넣는 다는 뜻이자나...
// 그동안 더해서 누적했던 sum+i는 버리공~ ㅋㅋㅋ
// ok 시도 3)
int sum = 0; // 합계를 담을 변수 선언 및 초기화
int i = 23; //반복문(while)에서 반복시킬 변수 선언 및 초기화
while( i<1093){ //반복시킬 조건 1) 숫자 범위
sum = (i%3==0)? sum+i : sum ;
i++;
}
System.out.println(sum);
// 예제7) 1 ~ ? 얼마까지의 합을 더했을 때 100 이상이 될까요?
// while문에 대한 진퉁 문제 인듯
int i = 1 ;
for( int sum =1 ; sum<99 ; sum++){
sum = sum+i; // i 를 증가시킬 방법?
} //어? 지금 보니까 처음부터 과정이 틀렸네 ? ㅋㅋㅋㅋ
//시도 1.
int sum=0; //합을 구하기 위한 변수 선언
// 1 <= i < y? //계속해서 증가하는 변수의 범위는?
//계속해서 증가하는 값에 대한 변수 선언 -> //반복문을 위한 변수 선언
int i=1; // 배우기로는 뭔지 모르는 수를 구할때 while을 쓰라는데... 체감이...
//while( 조건 ){ //어떤 유형으로 조건을 넣어야하는지.. 다시말해 변수가 2이상 일텐데..
// 이번 꺼는 y ... 구하고자 하는 값 y는 몇인지는 모르지만
// 그 동안의 증가되온 변수들의 합( sum+i )인
// sum이 100을 넘는 순간의 '반복문 변수' i 의 값
// 질문 1)
//while( 조건절 )은 뭔지 모르는 변수 i(y) 에 대한 조건이 들어가야 하나?
// 궁극적인 조건이 되는 sum의 상태에 대한 조건으로 들어가야 하나
//근데.. 생각해보니까... 조건1부터 sum으로 맊으면 애초에 진입 자체가 안될듯..
// 앞에 예제처럼.. 그럼 일단 반복되는 합계를 구하고
// 조건 안에 조건을 어떻게 만들지 고민해보자
//while(i...){ //어? 어떻하지? i에 대한 조건? 조건이랄게 없자녀?
// 여기서 i는 조건없이 계속 증가하는 수인데 일단 다 받어봐?
//,.,,아.. 내 생각이 아니다.. 문득 어제 수업 시간 한 장면이 떠올랐다.. 아...이런..
}
while(true) { // i를 증가 시켜야하니까.. 일단 드루와
i++ ; // 일단 선언했던 int i =1 이 들어오고 이걸 ++ . but 아직 int i =1 !
sum = sum + i ; // 증가되는 반복변수들의 합을 구해야지
// 아.. int i 가 연산 전에 2 가 되네...
}
// 아... 이번엔 " i++ ;" 의 위치, 변수 선언 및 초기화를 생각없이 따라간 것 같다...
//다시.. 시도 2- 1단계
int sum=1; // 1부터 시작하니까 합의 디폴트는 1 int i=2 ; // 합이 1부터 시작하니까.. 증가되는 반복문용 변수는 2부터 시작 // 확인 용 System.out.println(" 반복문 전 i : "+i); while(true) { sum = sum + i ; // 확인 용 System.out.println(" 반복문 연산 전 i :" + i); // 확인 용 System.out.println(" 반복문 연산 후 sum :" + sum); i++ ; // 확인 용 System.out.println(" 반복문 증감 후 i :" + i); }
// 여기까지가 일단, 증가하는 반복문용 변수들의 합을 구하는 구조
// 그렇게 증가 시키다가 sum이 100을 넘기면
// 반복문을 종료시키고. 그때의 각각의 값을 출력하면 되겠구나.... 아... 이런 생각이 떠오르네...
//다시.. 시도 2- 2단계 : sum < 100 인 경우에 멈추기
int sum=1; int i=2 ; while(true) {
sum = sum + i ; i++ ; // 여기까지가 반복되는 수의 합
if(sum>=100){ // 여기서부터가 sum이 100이거나 100을 넘어서는 순간을 찾기 위한 조건식
System.out.println( "100을 넘기는 첫번째 값 반복문 증감변수 i :"+ i );
System.out.println( "그때의 합은 :"+ sum );
}
break; // 아.. 그러고보니... 아까 while문에서는 while문 특유의 break를 안썼네...
}
System.out.println( " 돌아간거 맞니? 확인 용 sum : "+ sum );
// 아...먹통 .. 뭐가 문제지... braek point도 안돌아감.....
// 다행이?? ㅋㅋㅋ... break를 빼보니까... 돌아가긴하는데... 무한증식......
// break 위치를 if문으로 이동....
// 된다. 정상 답 도출...
// 왜지?!!!!!
// break를
// while안에 if 문 만족하는 경우 그 안의 구문을 다 수행하고 나오면 break를 실행하도록 넣는데..
// 아..
// 그럼... while 을 통과한 첫 번째 조건문부터 밖으로 튕기겠네...
// 그르네.. System.out.println( " 확인 sum :"+ sum );를 해보니까...
// while 을 통과하자마자 break에 걸려서.... 바로 나왔네....
//다시.. 시도 3
int sum=1; int i=2 ; while(true) {
sum = sum + i ; i++ ;
if(sum>=100){
System.out.println( "100을 넘기는 첫번째 값 반복문 증감변수 i :"+ i );
System.out.println( "그때의 합은 :"+ sum );
break;
}
}
//[문제]
//1~? 합이 100 이상이 될까요?
// 1<= x < y
// int sums = 0; // 100 이상의 합계
// int is= 0; // 증가하는 수
// while(sums>99){
// sums = is + sums;
// is++; // 넘은 순간에도 마지막에 한번 더 찍는다 1
// }
// System.out.println(is);
//타입 1
//시작하는 수
//합계
//선언을 하는 순간이 아닌, 초기화되는 값이 적용되는 순간을 고려해야한다
//타입 2
//break 사용 가장 까까운 반복문을 나온다!
// int start = 1;
// int sum3 =0;
// while(true){
// sum3 += start;
// if(sum3>=100){
// break;
// }
// start++;
// }
// System.out.println(start);
// //Scanner //import java.util.Scanner; 추가됨
// Scanner sc = new Scanner(System.in); //콘솔창에 입력받기 위해 한번 선언한 상태에서는main()중엔 sc.으로 계속 쓸 수 있다
// System.out.println("합계가 몇 이상일지 숫자를 입력해주세요");
// //sc.nextInt();
// //2000
// int endSum = sc.nextInt();// "숫자" 받을 때
//
// int start = 1;
// int sum3 =0;
// while(true){
// sum3 += start;
// if(sum3>=endSum){
// break;
// }
// start++;
// }
// System.out.println(start);
//
// System.out.println("문자를 입력해주세요");
// String str = sc.next(); //"문자"열을 받을 때 //콘솔창에 입력받기 위해 한번 선언한 상태에서는 sc.으로 계속 쓸 수 있다
// System.out.println(str);
//중첩
//2 * 1 = 2 숫자만 변수에 담는다
// int dam =2;
// int gob =1;
// System.out.println(dam +"*"+ gob +"="+ dam*gob);
//2 * 1 = 2
//2 * 2 = 4
// int dam =2;
// System.out.println(" --- 2수작업 --- ");
// System.out.println(dam +"*"+ 1 +"="+ dam*1);
// System.out.println(dam +"*"+ 2 +"="+ dam*2);
// System.out.println(dam +"*"+ 3 +"="+ dam*3);
// System.out.println(dam +"*"+ 4 +"="+ dam*4);
// System.out.println(dam +"*"+ 5 +"="+ dam*5);
// System.out.println(dam +"*"+ 6 +"="+ dam*6);
// System.out.println(dam +"*"+ 7 +"="+ dam*7);
// System.out.println(dam +"*"+ 8 +"="+ dam*8);
// System.out.println(dam +"*"+ 9 +"="+ dam*9);
// System.out.println(" --- for문 --- ");
// int dam =2;
// for(int gob=1 ; gob<10 ; gob++){
// System.out.println(dam +"*"+ gob +"="+ dam*gob);
// }
// int dam =3;
// for(int gob=1 ; gob<10 ; gob++){
// System.out.println(dam +"*"+ gob +"="+ dam*gob);
// }
// int dam =4;
// for(int gob=1 ; gob<10 ; gob++){
// System.out.println(dam +"*"+ gob +"="+ dam*gob);
// }
// int dam =5;
// for(int gob=1 ; gob<10 ; gob++){
// System.out.println(dam +"*"+ gob +"="+ dam*gob);
// }
// int dam =6;
// for(int gob=1 ; gob<10 ; gob++){
// System.out.println(dam +"*"+ gob +"="+ dam*gob);
// } ...
// System.out.println(" --- 중첩 for문 --- "); // 안에서 부터
// for(int dam=2 ; dam<10 ; dam++){
// for(int gob=1 ; gob<10 ; gob++){
// System.out.println(dam +"*"+ gob +"="+ dam*gob);
// }
// System.out.println("");
// }
//문제
//구구단에서 짝수단에 홀수 곱만 출력
// for(int dam=2 ; dam<10 ; dam++){
// if(dam%2==0){
// for(int gob=1 ; gob<10 ; gob++){
// if(gob%2!=0){
// System.out.println(dam +"*"+ gob +"="+ dam*gob);
// }
// }
// System.out.println("");
// }
// }
// for(int dam=2 ; dam<10 ; dam++){
// for(int gob=1 ; gob<10 ; gob++){
// if(dam%2==0 && gob%2!=0){
// System.out.println(dam +"*"+ gob +"="+ dam*gob);
// }
// }
// System.out.println("");
// }
//문제 - for문을 while문으로 변경
// for(int dam=2 ; dam<10 ; dam++){
// for(int gob=1 ; gob<10 ; gob++){
// System.out.println(dam +"*"+ gob +"="+ dam*gob);
// }
// System.out.println("");
// }
// int dam=2 ;
// while(dam<10){
// int gob=1 ; // 안에 넣는 이유를 이제 알겠네...!
// // 여기부터가 두번때 반복문의 덩어리 이잖아!
// while(gob<10){
// System.out.println(dam +"*"+ gob +"="+ dam*gob);
// gob++;
// }
// dam++;
// System.out.println("");
// }
//2단만 찍어라
// int dam=2 ;
// while(dam<10){
// int gob=1 ;
// while(gob<10){
// System.out.println(dam +"*"+ gob +"="+ dam*gob);
// gob++;
// }
// dam++;
// System.out.println("");
// break; // 2부터 시작하니까 한바퀴만 돌리고 나가자
// }
int dam=2 ;
int gob=1 ;
while(gob<10){
System.out.println(dam +"*"+ gob +"="+ dam*gob);
gob++;
}
System.out.println("");
/* 4. do while
- while문의 변형으로 기본구조는 while문과 같으나 블럭{}을 먼저 수행하고 조건식을 판단한다
- 기본구조
do{
}while(조건식); */
//예제) 사용자로부터 몇번을 받을 지 모를때. 사용자로부터 임의의 문자를 임의의 번 입력받다가 중간에 'x'가 나오면 중단
// Scanner sc = new Scanner(System.in);//입력기능 추가
// System.out.println("문자열을 입력해주세요");//무한 반복
// String str = sc.next(); //문자열 입력
// System.out.println(str);
Scanner sc = new Scanner(System.in);
String str = null;
do{
System.out.println("문자열을 입력해주세요. \n그만하려면 x를 실행하세요");//무한 반복
str = sc.next();
System.out.println(str);
}while(!str.equals("x")); //입력받은 값은 비교가 안된다. 그래서
//기본형 비교는 '==' 참조형 비교는 '.equals'
/*
5. break문
- 현재 위치에서 가장 가까운 'switch'문 또는 '반복'문을 '나갈때' 사용
6. continue문
- '반복문' 내에서만 사용가능!
- 반복문 끝으로 이동하여 '다음 반복문'으로 넘어간다
- skip용 */
for(int jc=0 ; jc <20 ; jc++){
if(jc%2==0){
continue; //짝수일때만 찍지말고 그냥 넘어가라
}
System.out.println(jc);
}
'새로워지기 > 서른의 생활코딩' 카테고리의 다른 글
6일차) 4장 연습문제 20180606_am 2차시도 (0) | 2018.06.07 |
---|---|
6일차) 4장 연습문제 20180606_am 1차시도 (0) | 2018.06.06 |
6일차) 주요 내용 복습 및 외래키 정의 20180605_pm (0) | 2018.06.05 |
5일차) SQL 질의어, 그 중 트랜젝션에 대해 알아보자 20180604pm (0) | 2018.06.04 |
5일차) 관계형 데이터모델에서 키 key 에 대해 알아본다 20180601pm (0) | 2018.06.02 |
댓글