재밌고 어려운 IT를 이해해보자~!

형변환, 반복문 본문

코리아IT핀테크과정

형변환, 반복문

언제나즐거운IT 2023. 11. 22. 16:46

형변환

자바에는 다양한 자료형이 존재한다. 때때로 우리는 그것들의 형을 변경해서 사용해야 원하는 출력을 얻을 수 있다.

예시코드-

package class01;

public class Test01 {
	public static void main(String[] args) {
		
		// [문제]
		// 10,7,2가 저장된 변수가 3개 있습니다.
		// 세 변수 a,b,c의 총합을 출력해주세요.
		// "10,7,2의 총합은 19입니다."
		// 그리고
		// 세 변수의 평균값을 출력해주세요.
		// "10,7,2의 평균은 6.333333입니다."
		// 만약, 평균값이 5이상이라면
		// 평균이 높습니다!
		// 만약 평균값이 5미만이라면
		// 평균이 낮습니다...
		// 라고 출력해주세요!~~
		int a=10, b=7, c=2;
		int total = a+b+c;
		//double avg = (double)total/3;
		double avg = total*1.0/3;
		// 6.0이 나오는 이유? => 연산자 우선순위 떄문!!!
		// 이문제해결방법 ?
		// total값을 가장 먼저 double로 변환(형변환,캐스팅)
		// *1.0 하기
		
		System.out.println(a+","+b+","+c+"의 총합은"+total+"입니다.");
		System.out.print(a+","+b+","+c+"의 평균은");
		System.out.printf("%.6f",avg);
		System.out.print("입니다.\n");
	
		if (avg>=5) {
			System.out.println("평균이 높습니다!");
		} else {
			System.out.println("평균이 낮습니다!");
		}
		
	}
}

형변환은 강제형변환과 자동형변환이 있다.

강제형변환의 경우 double avg = (double)total/3 과 같이 괄호안에 자료혀을 넣어 형변환을 시키는 것 인데, 자동형변환을 쓸 수 있으면 쓰는게 더 좋다고 한다. 강제형변환을 할 경우 컴퓨터에 더 무리가 가는 방법.

 

반복문

반복문!!! 반복문은 코딩에 있어서 정말 중요한 것 같다. 반복문을 반복해서 많이쓴다!!

 

while()

while(조건식) => 해당 조건식이 T 일때에만 반복문을 수행

for()

for(초기식;조건식;증감식) => ~부터 ~를만족할때 까지 ~진행

 

보통 while은 무한루프를 만들어서 사용하기 좋을때 사용하며 반드시 종료조건과 함께 사용해야한다.

for은 초기조건과 끝조건을 알때 사용하는 편이다.

 

반복문을 사용하면 다음과 같은 이점이 있다!
1. 코드를 재사용할수있다.
2. 코드 가독성이 좋아짐.
3. 개발 비용이 절감 => 영업이익증가 => 회사가 아주좋아함...
4. 개발 시간이 단축 => 영업이익증가 => 회사가 아주좋아함...
5. 오류가 줄어든다.

 

하지만 무한루프를 원한게 아닌데 무한루프를 돌게되면 치명적인 에러가 있을 수 있음으로

항상 조심해야한다!

 

while, for 문제

package class03;

public class Test02 {
	public static void main(String[] args) {
		
	
//	[문제1]
//	정수 3인 a와 1인 b가 있습니다.
//	1부터 3까지 모두 출력해주세요
	int a = 3;
	int b = 1;
	for (int i=b; i<=a; i++) {
		System.out.println(i + " ");
	}
//	
//	[문제2]
//	이번에는 3부터 1까지 -1씩 빼가면서 출력해주세요
	System.out.println("====================");
	for (int i=a; i>=1; i--) {
		System.out.println(i + " ");
	}
	
//			
//	[문제3]
//	1부터 10까지 출력하는데,,
//	단! 홀수만 출력해주세요!!
	System.out.println("====================");
	for (int i=1; i<=10; i++) {
		if (i%2!=0) {
			System.out.println(i + " ");
		}
	}
//	
//	[문제4]
//	i는 3입니다.
//	3부터 무한하게 2씩 증가시키면서 출력해주세요
//	단, i가 1000이 넘어가면 종료
	System.out.println("====================");
	int i = 3;
	while(true) {
		System.out.println(i);
		if (i>1000) {
			break;
		}
		i+=2;

	}

	}
}

 

중첩 제어,반복문

중첩이 많아질수록 헷갈려지기 마련이다. 항상 디버깅표를 작성을 하는 습관을 들이도록 하자.

 

중첩 반복문 별찍기 !!! 난이도 ★ ★ ★ ★ ★ ★ ★ ★ ★ ★

3가지 모양으로 별을 찍기전에 디버깅 표 부터 작성해보자!

문제는 3가지이고 각각의 출력은 다음과 같다.

[1]

*
**
***
****
*****

[2]

*****
****
***
**
*

[3]

*****
 ****
  ***
   **
    *

 

각각에 대한 디버깅표 -

[1]

a   a<5   i   ???
========================
0    T    0    T
          1    F

1    T    0    T
          1    T
          2    F

2    T    0    T
          1    T
          2    T
          3    T

====> ???조건식은 i가 a보다 작거나 같을때 True 이다.
====> ???조건식은 i<=a


[2]

a    a<5     i     ????
===========================
0     T      0      T
             1      T
             2      T
             3      T
             4      T
             5      F

1     T      0      T
             1      T
             2      T
             3      T
             4      F

2     T      0      T
             1      T
             2      T
             3      F
             
====> ??? 조건식은 a가 1개증가할때 마다 i가 한개씩 줄어든다.
====> ??? 조건식은 a가 0일때 i<5 
====> ??? 조건식은 a가 1일떄 i<4 
====> ??? 조건식은 a가 2일때 i<3 
====> ??? 조건식은 i<5-a


[3]

a    a<5     i     ????
===========================
0     T      0      T
             1      T
             2      T
             3      T
             4      T
             5      F

1     T      0      T
             1      T
             2      T
             3      T
             4      F

2     T      0      T
             1      T
             2      T
             3      F
             
====> ???조건식은 별표 개수만 보면 [2]와 동일 하지만 왼쪽부터 출력되는 것을 생각하면
공백도 함께 출력한다고 생각을 해야한다. -> "*" 가 아닌 공백에 대한 디버깅표 추가
a    a<5     i    ????      ->여기서 i는 공백의 반복회수
===========================
0     T      0      F       --> 1행 공백 0개 * 5개
                        
1     T      0      T       --> 2행 공백 1개 * 4개
             1      F
                   
                   
                   

2     T      0      T	    --> 3행 공백 2개 * 3개
             1      T
             2      F
                   
====> ??? 조건식은 a가 0일때 i는 0보다 작아야 한다.
====> ??? 조건식은 a가 1일때 i는 1보다 작아야 한다.
====> ??? 조건식은 a가 2일때 i는 2보다 작아야 한다.
====> ??? 조건식은 i<a

-------------------------
따라서 합치면 

a    a<5     i(*)  i<5-a    i(" ")    i<a  
==============================================
0     T      0      T        0        F
             1      T
             2      T
             3      T
             4      T
             5      F

1     T      0      T        0        T
             1      T        1        F
             2      T
             3      T
             4      F

2     T      0      T        0        T
             1      T        1        T
             2      T        2        F
             3      F


*결론*
반복문 안에 2개의 반복문이 들어있는 중첩 반복문이다.

 

디버깅표를 토대로 코딩을 해보자.

package class04;

public class Test01 {

	public static void main(String[] args) {
	//중첩 제어문
	//중첩 반복문
	//중첩 for문(이중 for문) << 별찍기
	
	// 구구단 문제

	
		//[1]
		for(int a=0; a<5; a++ ) {	
			for (int i=0; i<=a; i++) {
				System.out.print("*");
				}
			System.out.println();
			}
	
		System.out.println("==================");
	
	
		//[2]
		for(int a=0; a<5; a++) { 	
			for (int i=0; i<5-a; i++) {
				System.out.print("*");
			}
			System.out.println();
		}
		
		System.out.println("==================");

	
		//[3]
		for (int a=0; a<5; a++) {
				
			for (int i=0; i<a; i++) {
				System.out.print(" ");
			}
			for (int i=0; i<5-a; i++) {
				System.out.print("*");
			}
			System.out.println();
		}
		
		
		System.out.println("=================");
		
 //if else를 사용한 출력
    public class Test01 {
        public static void main(String[] args) {
            //우상단직각삼각형은 결국 5X5로 찍은것이다.

            for(int a=0; a<5;a++) {
                for(int i=0;i<5;i++) {
                    if(i<a) {
                        System.out.print(" ");
                    }
                    else {
                        System.out.print("*");
                    }
                }
                System.out.println();

            }
        }
    }

    //상위코드에 대한 디버깅표 ★ 를 보니까 왜 i<a여야하는지 이해가 쉽다.

    //a    a<5    i    i<5     공백?
    //0     T     0     T		F
    //		   	  1	    T       F
    //            2     T       F
    //            3     T       F
    //            4     T       F
    //            5     F       F
    //               
    //1     T     0     T       T
    //            1     T       F
    //            2     T       F
    //            3     T       F
    //            4     F       F
    //          
    //2     T     0     T       T
    //            1     T       T
    //            2     T       F
    //            3     F       F

	//==> a와i관계를 살펴봤을때 공백이 T가 되는 조건은 일단 i==a 면 공백은 false이다
	//==> a가 1일때 i는 0이면 공백은 True
	//==> a가 2일때 i는 0,1이면 공백은 True
	//==> 즉 i<a !

		
	}
}

'코리아IT핀테크과정' 카테고리의 다른 글

버블정렬 코드 개선  (0) 2023.11.27
이진 탐색(Binary Search)  (2) 2023.11.26
학생부 프로그램 제작  (2) 2023.11.25
배열(Array)  (3) 2023.11.23
JAVA, Class, 함수, 디버깅표  (0) 2023.11.22
Comments