초급의 끄적거림

[JAVA] 반복문 (for / 무한루프 / break / continue) 본문

JAVA

[JAVA] 반복문 (for / 무한루프 / break / continue)

codingD 2019. 9. 10. 15:43

1. 반복문


<형식>
 for(시작값; 종료값; 증감) { }

<무한LOOP (무한루프)>
 for(;;){ }, while(true){ }

 - scope     : 유효범위

 - break     : 반복문을 빠져나옴 (switch에서 사용)

 - continue : 반복문을 계속 수행

for(int a=1; a<=3;a=a+1){//a라는 변수는 for 안에서만 쓸 수 있음 (a의 scope : for 안에 국한) 
	System.out.println(a+"JAVA"); // 1: JAVA  2 : JAVA 3 : JAVA
	/*
	 * a=1 에서 시작해서 종료값은 a<=3 이라 1<=3 JAVA 
       a=1+1 이니까                                 2<=3 JAVA   
       a=2+1                                          3<=3 JAVA
       a=3+1                                          4<=3   X
           
}//for end - 를 빠져나가면 변수 a가 사라지는 것, 알아서 삭제해줌 (=garbage collecting)

 

2. 변수의 유효범위


 - 지역변수와 전역변수는 같이 존재할 수 있다

 - 그러나 그 중 우선순위는 1) 지역변수 → 2) 전역변수

1) local variable : 지역변수, {  } 안에 선언
2) global variabel : 전역변수, 전체적으로 다 쓸 수 있는 변수
System.out.println(a); : 라고 지정 불가, a의 경우에는 for의 scope (유효범위) 에서만 사용되는 변수이기 때문에 if 외에서 a 변수 사용 불가

 

3. 연습


//4단 출력하기
for(int a=1; a<=9; a++){//a+=1
			            //a++
			            //++a
	System.out.println(4+"*"+a+"="+(a*4));
}//for end

// 알파벳 출력하기
for(char ch='A'; ch<='Z'; ch++){
	System.out.print(ch);  //ln이 없기 때문에 가로로 연달아 나옴
}//for end

//1~10중에서 3의 배수만 출력하기
	for(int a=1;a<=10;a++){ // for 안에  if문을 써도 됨, 이 때 {  }가 중복해서 많이 나올 수 있기 때문에 구별에 주의할 것
		if(a%3==0){ //주로 시험 문제는 'a%3==0' 이 제시되었을 때 ㅁ을 구하는 것.
			System.out.println(a);
		}//if end
	}//for end
    
// 갯수
// 누적
// 1~10사이 중에서 3의 배수의 갯수를 구하시오 - 3개
  int count=0;
  for(int a=1; a<=10; a++){
	  if(a%3==0){
	    count=count+1; //count+=1, count++, ++count
	    		       // 두 개씩 묶어서 숫자를 세고싶으면 +1이 아니라 +2를 하면 됨. (ex. 2 4 6 8 10...)
	   }//if end
	}//for end
		System.out.println(count+"개");
		
//1~10 사이 중에서 3의 배수의 합을 구하시오 - 18
  int hap=0 ;
  for(int a=1; a<=10; a++){
	if(a%3==0){
		hap=hap+a; // hap+=a
	}
  }//for end		 	
	System.out.println(hap);    
    
//문1) 서기 1년~ 서기 2019년 중에 윤년의 갯수를 구하시오
int count1=0;
for(int y=1; y<=2019; y++){
	if(y%4==0 && y%100!=0 || y%400==0){
		count1=count1+1;
	}
}//for end	
	System.out.println("윤년의 갯수 :"+ count1 + "개");
		
//문2) 4 팩토리얼 값을 구하시오.
// → 4가 1을 만날 때까지 나오는 수 4321을 다 곱하는것 = 4*3*2*1 = ?
long b=1; // 곱하기 누적할 때 시작값은 1. 주의할 것. (+) 곱하기를 하는 경우에는 int 만으로 부족할 수 있기 때문에 long 사용 추천
for(int a=4; a>=1; a--){  //혹은 a=1; a<=4; a++ 도 가능
	b=b*a;
}//for end
		
System.out.println("4팩토리얼 값 : "+ b);    

 

// 문1) 1~100중에서 2의 배수이면서 3의 배수의 갯수를 구하시오
int count = 0;
for(int a=1; a<=100; a++){
	if(a%2==0&&a%3==0){ //if(a%6==0) 으로 해도 상관없음
		count = count+1; //count++ 라고 해도 됨
	}//if end
}//for end

	   System.out.println(count + "개");
           
           
// 문2) 소문자 중에서 모음의 개수를 구하시오 - 모음 : 'a', 'e', 'i', 'o', 'u'
int s = 0; // 개수의 시작이 0이라서
for(char al = 'a'; al<='z'; al++){
/*   if(al=='a'||al=='e'||al=='i'||al=='o'||al=='u'){
		s=s+1;   //= s++
	 }//if end
}//for end
		   
System.out.println("모음의 개수 :" + "s");
*/
	switch(al){
		case'a' :
		case'e' :	
		case'i' :
		case'o' :
		case'u' : s++;
	}//switch end
}//for end

	System.out.println("모음의 개수 :" + s + "개");
			
            
//문3) 알파벳을 한줄에 5개씩 출력하시오
// 카운트 변수를 5로 나누면 5개씩 반복된걸 알 수 있음 - 5의 배수인지를 알아보면 됨 + 5의 배수가 나오면 줄 바꿈 ln
/* 
	for(char alp = 'A';  alp<='Z'; alp++){
		if(alp%5==4){
			System.out.println(alp);
		} else  {System.out.print(alp);}
	}//for end
		 System.out.println();
*/
int upper=0;
for(char alp = 'A';  alp<='Z'; alp++){ //대문자 A 아스키번호 65, 
	upper++;//upper가 0에서부터 1씩 커지는 것을 볼 수 있음 - 5의 배수가 되는 부분에서 엔터를 치면 됨
	//System.out.print(upper);
	System.out.print(alp);
	if(upper%5==0){
		System.out.println();
	}//if end  
}//for end

		System.out.println(); //공백을 만들어주기 위해서 들어감
		
        
//문4) 1~100 중에서 짝수의 합, 홀수의 합을 각각 구하시오
int even = 0;  //짝수의 합
int odd = 0;   //홀수의 합
for(int 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 = ? (4번과 연관되어 있음)
//switch이론 : 한 번씩 번갈아가면서 수행
/*
int even1 = 0;  //짝수의 합
int odd1 = 0;   //홀수의 합
for(int a=1; a<=100; a++){
	if(a%2==0){
		  even1=even1+a;
	} else if (a%2!=0) {
		  odd1=odd1+a;
	}//if end
} //for end
    	System.out.println(odd1-even1);
*/
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);
		  
          
//문6) 두 수 사이의 합을 구하시오. - 2에서부터 5까지의 숫자를 다 더하시오, 2+3+4+5 = 14 OR 5+4+3+2 = 14
// swap : 변수값을 서로 교환 (0528 Test03_Sort)
int start=5, end=1;
int sum=0;
if(start>end){   //swap
 	int tmp=start; //start 가 end를 지정해주면서 사라져버리기 때문에 미리 tmp가 start라고 정해준것
 	start=end;  // 5= end
 	end=tmp;  // 1= tmp  - start = X
}//if end
 	
for(int a=start; a<=end; a++){
 	sum=sum+a;
}//for end
 		
        System.out.println(sum);
		   
           
//문7) 다음 식의 결과를 구하시오
/*
 1    2     3     4    5           99
 ㅡ - ㅡ + ㅡ - ㅡ +ㅡ . . . ㅡ = ?
 2   3      4    5    6           100
 → (1/2)-(2/3)+(3/4) . . .
*/
/*
int a = 1;
double dd= a*1.0/(a+1)*1.0;
for(a=1;a<=99;a++){
 	if(a%2==0){
 		dd=dd*(-1.0);  
 	}//if end 
}//for end

	  System.out.println(dd);
		  
int aa = 1;
double WW =aa/aa+1;//분자-1을 하거나 분모에 +1 
double GG = (aa+1/aa+2)*-1;		   
for( aa=1; aa<=100; aa++){
	if(aa%2!=0){
		GG=(double)(GG+aa)*-1;
	} else {
		WW=(double)(WW+aa);
	}//if end
} //for end

	 System.out.println(GG+WW);	   
*/
 		   
 //<강사님 방법> 		   
double h = 0.0;
boolean f= false;
for(int A=1; A<100; A++){
 	if(f){
 		 h= h - (A/(double)(A+1));
 		 f=false;
 	}else{
 		 h=h+(A/(double)(A+1));
 		 f=true;
 	}//if end
}//for end

 		  System.out.println(h);           

 

4. Continue 반복문


break : 반복문을 빠져나옴
continue : 반복문을 계속 실행
반복문과 함께 사용됨

 

for(int a=1; a<10; a++){
	if(a==5){
    	break;
    }//if end
    System.out.print(a+" "); // 만약 a가 5가 나오면 break가 걸려서 빠져나가기 때문에 4까지 나옴 
}//for end

System.out.println(); //13줄에서 ln이 없이 연달아 적히면서 줄바꿈이 실행되지 않아서 공백을 넣고 줄바꿈 실행 
		
for(int a=1; a<10; a++){
	if(a==5){
		continue;
	}//if end
		System.out.print(a+" "); //1부터 증가가 되다가 5가 됐을 때 반복문을 다시 시작하게 함. 그래서 5일 때 유턴해서 9까지 다시 증가 
}//for end
Comments