*이클립스 - class생성 시 package도 동시생성 가능 (class에 package 이름 같이 넣어주면 됨 )
반복문
명령어 : for, while, do~while
문법 형식 : for ( 시작값 ; 종료값 ; 증감 ) { 조건 }
-----------횟수--------- -반복-
Scope : 유효범위 / class를 어디까지 쓰겠느냐에 따른 범위설정은 아주 중요함, 데이터간의 교류 설정 정도범위 중요
무한LOOP : 반복이 무한으로 감
break : 반복문을 빠져나옴
continue : 반복문을 계속 수행
예제 ) for 구문 - 증가에 따른 반복
for ( int a=1; a<=3; a=a+1 ){
System.out.println(a+"JAVA");
}//for end
-for ()안의 int a설정해준 변수값은 for구문안에서만 사용가능(이것이 scope)
- ->for end 빠져나온 후 System.out.println(a); 실행할 경우 에러남
-분석 : for ()안의 시작값은 시작할 시에만 보고 종료값의 범위와 증감을 반복하여 종료값 범위에 다달했을 때 탈출
변수의 유효범위 (협소한 범위가 우선순위)
- public 역시 유효범위
- local variable : 지역변수
- global variable : 전역변수
예제 ) for 구문 - 감소에 따른 반복
for (int b=3;b>=1; b=b-1){
System.out.println(b+"SEOUL");
}//for end
for 구문안에 if 구문, if 구문안에 for 구문, for 안에 for 충분히 가능함
예제 ) for 구문 - 구구단 4단출력
for(int a=1; a<=9; a=a+1){
System.out.println(4+"*"+a+"="+(a*4);
}//for end
요렇게 나옴 ! 귀욤지다 !
*a=a+1 의 다른 표현; a++(후계산) ,++a(전계산), a+=1
예제 ) for 구문 - 알파벳 출력
for (char ch='A'; ch<='Z'; ch++){
System.out.println(ch);
}//for end
예제 ) for 구문 - 1~10중에서 3의 배수만 출력
for(int a=1; a<=10;a++){
if(a%3==0){
System.out.println(a);
}//if end
}//for end
for구문안에 if문 사용 가능!
{ } 짝꿍 조심 또 조심하기 , 적을때마다 end 표시해서 헷갈리지 않게 하기!
예제 ) for 구문 - 서기1년-서기2019년중에서 윤년만 출력하기
for(int y=1;y<=2019;y++){
if(y%4==0 && y%100!=0 || y%400==0){
System.out.println(y);
}//if end
}//for end
한번 적었던 공식은 웬만하면 다시 쓰지않고 복사해서 쓰기
갯수 - count 변수
누적 - hap 변수
예제 ) for 구문 - 1~10 사이 중에서 3의 배수의 갯수를 구하시오
int count = 0;
for(int a=1; a<=10;a++){
if(a%3==0){
count=count+1;
}//if end
}//for end
System.out.println(count+"개");
이건 맞는 것, 도출결과 -> 3개
int count = 0;
for(int a=1; a<=10;a++){
if(a%3==0){
count=count+1;
System.out.println(count+"개");
}//if end
}//for end
만약 System.out.println(count+"개"); 를 if문 밑에 적을 경우, for구문에 걸려 반복되어 나오기 때문에 for구문을
빠져나온 후 print 해줘야한다.
이럴 경우 도출결과 -> 1개, 2개, 3개
예제 ) for 구문 - 1~10 사이 중에서 3의 배수의 합을 구하시오
int hap = 0;
for(int a=1; a<=10;a++){
if(a%3==0){
hap=hap+a;
}//if end
}//for end
System.out.println(hap);
도출 결과->18
이것 역시, for구문에 걸려 반복되어 나오기 때문에 for구문을 빠져나온 후 print 해줘야한다.
<연습문제>
문제 1) 서기 1년~서기 2019년 중에서 윤년의 갯수를 구하시오
int leap=0;
for(int y=1;y<=2019;y++){
if(y%4==0 && y%100!=0 || y%400==0){
leap=leap+1;
}//if end
}//for end
System.out.println("윤년의 갯수 : "+leap);
윤년의 공식 다시 적지말고 복붙해서 쓰기
도출 결과-> 윤년의 갯수 : 489
문제 2) 4팩토리얼값을 구하시오
//내 풀이
int hap=1;
for(int a=1; a<=4;a++){
hap=hap*a;
}//for end
System.out.println("4!의 값 : "+hap);
//선생님 풀이
long gop=1;
for (int a=4;a>=1; a--){
gop=gop*a;
}//for end
System.out.println("4팩토리얼 : "+gop);
도출결과 내풀이 -> 4!의 값 : 24
선생님풀이 -> 4팩토리얼 : 24
도출된 결과의 값은 같지만, 팩토리얼의 의미는 4*3*2*1 임 .
그러므로 a++가 아닌 a--로 해야 맞는 것 조심해야함
팩토리얼 a--
반복문 연습문제
문제 1) 1~100중에서 2의 배수이면서 3의 배수의 갯수를 구하시오
int count=0;
for (int a=1;a<=100;a++){
if(a%6==0){
++count;
}//if end
}//for end
System.out.println("문제 1) 2의 배수이면서 3의 배수의 갯수 : "+count);
출력결과 :
문제 1) 2의 배수이면서 3의 배수의 갯수 : 16
-> a%2==0 && a%3==0 해도 됨
문제 2) 소문자 중에서 모음의 갯수를 구하시오
->모음 a , e , i , o , u
//for구문
int mo=0;
for(char ch='a'; ch<='z';ch++){
if(ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='u'){
mo++;
}//if end
}//for end
System.out.println(mo);
//switch구문
int mo1=0;
for(char ch='a'; ch<='z';ch++){
switch(ch){
case 'a' :
case 'e' :
case 'i' :
case 'o' :
case 'u' : mo1++;
}//switch end
}//for end
System.out.println(mo1);
처음엔 문제를 보고 아스키코드 숫자를 연산시켰다. 아주 허무한 생각 ㅋ ㅋ ㅠ
a 97 e 101 i 105 o 111 u 117 이것의 정렬기준이 무엇인지,,
이젠 너무 어렵게만 접근말고 단순하게 접근해야겠다
선생님의 풀이방식은 매우 간단하고 직접적, for구문으로 직접 모음을 선언하여 갯수를 출력하였고,
switch구문으로 각 case설정을 해주어 모음 갯수를 출력했다. 눈물남
출력결과 -> 5
문제 3) 알파벳을 한줄에 5개씩 출력하시오
ABCDE
FGHIJ
KLNMO
PQRST
UVWXY
Z
->count변수 5로 나눠,,, 5의 배수인지 count의 응용 5번의 한번씩
->syso(); 아무것도 안쓰면 줄바꾸기
내가 푼거 ->개망함
//내가 한거 개망함
int al=0;
for(char a='A'; a<='Z';a++ ) {
if(a%5==0){
System.out.println(a);
}//if end
System.out.println();
}//for end
system.out.print 로 선언 후 일렬로 정렬, 5의 배수에서 줄바꿈
int upper=0;
for(char ch='A'; ch<='Z';ch++ ) {
upper++;
//System.out.print(upper);
System.out.print(ch);
if(upper%5==0){
System.out.println();
}//if end
}//for end
분석과정
1) syso(upper)에 주석안달고, if절에 주석달았을 때, 한줄로 출력됨 .
이때 우리는 알파벳을 한줄에 5개씩 출력해야하므로 5,10,15에서 끊어야한다.
따라서 5의 배수일때, 나눠주면 되는것
2) if절에 주석을 안달았을 때 , upper의 숫자와 5개씩 나눠진 기준으로 보인다.
5개씩 나눠져 엔터가 쳐진건 syso() 때문, 이것은 엔터를 의미함.
3) syso(upper)에 주석을 달았을때, 결과가 출력되었다. 쁴읭 어렵다
*문제 4, 5 관련성이 있음
문제 4) 1~100중에서 짝수의 합, 홀수의 합을 각각 구하시오
int even=0; //짝수의 합
int odd = 0; //홀수의 합
for(int a=1;a<=100;a++){
if(a%2==0){
even=even+a;
}//if end
if(a%2==1){
odd=odd+a;
}//if end
}//for end
System.out.println("문제 4) 짝수의 합 : "+even);
System.out.println(" 홀수의 합 : "+odd);
a의 순서대로 출력 시 , 격자로 짝수 홀수로 번갈아가면서 실행
내가 한 방법은 짝수 홀수 각각 조건식을 적어 주었지만 틀림 else가 없움
쌤이 한건 else를 적으면서 조건하나를 덜 적고 자동으로 짝수가 아닌 수로 나간담
int even=0; //짝수의 합
int odd = 0; //홀수의 합
int a;
for(a=1;a<=100; a++){
if(a%2==0){
even=even+a;
}else{
odd=odd+a;
}//if end
}//for end
System.out.println("짝수의 합 : "+even);
System.out.println("홀수의 합 : "+odd);
문제 5) 다음식의 결과를 구하시오
1-2+3-4.....+99-100=?
int res1=0; //홀수의 합
int res2=0; //짝수의 합
for(int a=1;a<=100;a=a++){
if(a%2==1){
res1=res1+a;
}//if end
for(int b=-2;b>=-100; b=b--){
if(a%2==1){
res2=res2+b;
}//if end
}//for end
}//for end
System.out.println("문제 5) "+ res1);
-switch 이론 : 한번씩 번갈아 가면서 수행
boolean형과 비슷 / 짝홀수도 가능
더하기와 빼기를 번갈아가면서 해야하므로 불린형의 true false를 응용해서 사용
a=1 if(false) else{flag=true}
a=2 if(true) else{flag=false}
a=3 if(false) else{flag=true}
...... 격자로 수행
->그럼 이 문제에 응용했을 땐 if문에 +를, else문에 -를
boolean flag=false;
int hap=0;
for(int a=1; a<=100; a++){
if(flag){
hap=hap-a;
flag=false;
}else{
hap=hap+a;
flag=true;
}//if end
}//for end
System.out.println(hap);
출력 결과-> -50
문제 6) 두 수 사이의 합을 구하시오
int start=2, end=5;
int hap=0;
for(int a=2;a<=5;a++){
hap=hap+a;
}//for end
System.out.println("문제 6) 2에서 5사이의 합 : "+hap);
a=2 b=5,
변수끼리 맞교환할때 tmp변수(제3변수)꼭 필요 !
swap : 변수값을 서로 교환
//swap 방식
int start=5, end=2;
int sum=0;
if(start>end){ //swap
int tmp=start;
start=end;
end=tmp;
}//if end
System.out.println(sum);
//for 구문
int start=5, end=2;
int sum=0;
for(int a=start; a<=end; a++){
sum=sum+a;
}//for end
System.out.println(sum);
문제 7) 다음식의 결과를 구하시오
break : 반복문을 빠져나옴
continue : 반복문을 계속 실행
예제) break, continue
for(int a=1; a<10; a++){
if(a==5){
break;
}//if end
System.out.print(a+" ");
}//for end
System.out.println();
for(int a=1; a<10; a++){
if(a==5){
continue;
}//if end
System.out.print(a+" ");
}//for end
출력결과
1 2 3 4
1 2 3 4 6 7 8 9
break - 회전수가 남아있어도 break가 걸리면 나감 ㅋ
continue - 반복문을 계속 실행 ㅠ continue를 만나면 다시 올라감 , 5일때 continue를 만났으니 밑으로 출력이 안되고
위에 반복문으로 올라가서 6부터 출력된거임 .
'공부 > 자바 OOP' 카테고리의 다른 글
5월 22일 - 배열 2+연습문제 (0) | 2019.05.22 |
---|---|
5월 21일 - 배열 1 (0) | 2019.05.21 |
5월 21일 - while/ do~while 반복문+ 도형 + 연습문제 (0) | 2019.05.21 |
5월 17일 - 제어문 + QUIZ(if, switch) (0) | 2019.05.17 |
5월 17일 - 자바OOP 1 : 연산자 (0) | 2019.05.16 |