220921 정리

서이·2022년 9월 21일

수업정리

목록 보기
2/17

상수와 형변환

상수의 개념

  • 변수에 값을 딱 한번 할당 할 수 있으면 상수
  • 변경 불가
  • 키워드 final 선언이 붙음
int age = 29; // 변수
     age = 30; // 메모리 안에 값의 재할당이 가능하다.

final int AGE = 29; // 상수
AGE = 30; // X, 상수는 메모리 안에 값을 재할당 할 수 없다.

상수를 사용하는 이유

상수를 사용하는 이유는 값(리터럴)에 의미있는 이름을 지어주기 위함 이다.
코드의 유지보수성을 높이기 위함이다.

final int WIDTH = 20;
final int HEIGHT = 10;

// 앞으로 어떠한 곳에 상수가 쓰이던지 상수 값만 바꾸면 모든 식도 수정 된다.
// 식에서 상수의 이름을 보고 값이 어떤 역할을 하는지 알 수 있다.

int triangleArea = (WIDTH * HEIGHT) / 2;

리터널의 개념

 int 앞에 final을 쓰게 된다면, a는 상수(constant)가 된다. 여기서의 리터럴은 10이다.

리터럴 이란 값 자체를 의미한다.

int score = 100; // 100 은 리터럴
final int MAX = 200; // 200 은 리터럴
String str = "abs" // "abs" 는 리터럴

형변환(캐스팅)이란?

 컴퓨터는 연산시 데이터 타입을 맞춰야 한다. 이유는 컴퓨터는 2진수만 알아 듣기 때문이다.

 ex) int + long 의 데이터 타입을 가진 값을 연산하려면 둘 중 하나를 형 변환 시켜 연산 해야한다.

 이 때 컴퓨터는 값을 보존하기 위해서 int 보다 더 큰 값을 범위를 저장할 수 있는 long 으로 변환해서 연산을 진행한다.

 int 와 float 의 데이터 타입을 가진 값을 연산하면 float 으로 데이터 타입이 변경 된다. 이유는 int,float 모두 같은 메모이 사용 크기를 가지고 있지만 float 이 저장되는 값의 범위가 크기 때문에 소수점 값의 보존을 위해서 float 으로 변경 된다.

 자동 형변환이란?

👉 일반적으로 연산시 데이터 타입의 크기가 큰 방향으로,정수 보다는 실수형으로(소수점의 값을 보존하기 위해) 데이터 타입이 변경 됩니다.

**byte ➡️ short,char ➡️ int ➡️ long ➡️ float ➡️ double**

강제 형변환이란?

int wholeNumber = (int)PI;

👉 강제로 형 변환이 가능하다. 하지만 int 는 4byte 정수만을 저장할 수 있기 때문에 소수점 값은 값 손실이 일어난다.

short  num1 = 1;
short num2 = 2;

short num3 = (short) (num1 +num2);

👉 int 범위 이하에서는 연산을 진행하면 int로 자동 형변환이 발생한다. 따라서 위에 변수 num3 에 (num1 + num2) 값을 저장할 수 없어 에러가 발생한다. short 로 데이터 타입을 변경하여 저장 하고 싶다면 (short)로 강제 형 변환 시켜야 한다.

연산자 우선 순위

연산자 가장 우선순위가 큰 것

( ) 괄호는 최우선 연산자 – 실무에서 많이 쓰임

결합 방향은 같은 우선 순위일 때 먼저 계산 하는 것

int x=1, y=1;
int a = x++; // x 값이 사용되기 전에 증가된다. a는 1가 된다.
int b = ++y; // y 값이 사용된 후에 증가된다. b는 2가 된다.
System.out.println("a = "+ a +" b = "+b);

문자열 연산자

문자열과 숫자(정수나 실수)가 있으면, 문자열로 결합한다.

두 개의 다른 데이터 타입이 연산을 할 경우 형변환이 일어남

문자열 + 실수 = 문자열로 캐스팅 숫자를 문자로 인식함

복합 대입 연산자 예제

int x=1, y=1;
int a = x++; // x 값이 사용되기 전에 증가된다. a는 1가 된다.
int b = ++y; // y 값이 사용된 후에 증가된다. b는 2가 된다.
System.out.println("a = "+ a +" b = "+b);

답 a = 1 b= 2

삼항 연산자 예제

//if else
int a;
if(5<4) {
    a = 50;
}else {
    a = 40;
}
System.out.println(a); //결과 = 40 
		
//삼항연산자
int b = (5 < 4) ? 50 : 40; 
System.out.println(b); //결과 = 40

반복문

While

while 예제

int num = 0;
while(num<5) {
    System.out.println("I like java" + num);
    num++;
}

Do while

do while 예제

do {
    System.out.println("I like java" + num);
    num++;
} while (num < 5);

while과 do while의 차이점은?

do while : 최초 한번은 무조건 실행 된다

while : 조건에 따라서 실행 된다

for

for 예제

int num = sc.nextInt();
for(int i =1; i<=9;i++) {
    System.out.println(num*i);
}

for 문 구조

continue & break

break : 반복문 탈출 할때

for(int i = 1;i<100;i++) {
    if ((i % 5 == 0)&&(i % 7 == 0)) {
        System.out.println(i);
        break; // 해당 반복문을 중지 시킨다
    }
}

continue : 조건검사로 이동

for(int i = 1; i < 100; i++) {

    if(i %3 != 0) {
        continue; // 3의 배수가 아닐경우 다시 조건 검사로 이동한다
    }
    System.out.println(i); // 3의 배수만 출력한다
}

배열

배열 선언

  • 배열 선언은 메모리 할당
    • 배열 선언 시 메모리에는 배열 값의 첫번째 주소가 들어간다.
    • 배열 값들은 연속된 공간에 할당된다.
  • 배열 선언 방법
    • 첫 번째 방법

      int[] S = new int[10];
    • 두 번째 방법

      int[] scores = {65, 74, 23, 75, 68, 96, 88, 98, 54};

반복문 & 배열 연습

  • 1) 1000개 배열 만들고 1부터 1000까지 넣기 2) 배열 안의 값들 합구하기
    • foreach + ctrl + space : foreach 구문 자동 완성
//배열 생성
int[] arr = new int[1000];

//1~1000까지 넣기		
for(int i=0; i < arr.length; i++) {
	arr[i] = i+1;
}

//배열 값들 합 구하기
int sum = 0;
for (int num : arr) {
	sum += num;
}

//출력
System.out.println(sum);

//result
500500
  • 배열 랜덤 수 10개 넣고 최대값 구하기
    • 1~100 랜덤 수 : int num = (int) (Math.random()*100) + 1; (1을 더해줘야 한다. 안 더하면 0~99로 나온다)
    • 배열 arr 값을 전부 보고싶을 때 Arrays.*toString*(arr)
int[] arr = new int[10];
		
for (int i = 0; i < arr.length; i++) {
	int num = (int) (Math.random()*100) + 1;
	arr[i] = num;
}
System.out.println(Arrays.toString(arr));

int max = 0;
for (int num : arr) {
	
	max = (num > max) ? num : max;
	
}
System.out.println(max);
  • 로또 번호 뽑기 : 1부터 45까지 숫자 중 6개 번호 (단, 중복없이)
    • 1~45 사이 난수 생성 및 배열에 입력
    • 중복 제거하기

문제풀이

break문

public static void main(String[] args) {
	

		int num = 1;
		boolean search = false;
		
		while(num<100) {
			if(((num%5)==0) && ((num % 7 ) == 0)) {
				search =true;
				break;
			}
			num++;
		}
		if(search)
			System.out.println("찾는 정수 : " + num);
		else
			System.out.println("5의 배수이자 7의 배수인 수를 찾지 못했습니다");

	}
public static void main(String[] args) {
	
	
	int num = 0;
	
	
	for(int i=1; i<= 100; i++) {
		if(i % 7 == 0 && i % 8 == 0) {
			num = i;
			break;
		}
	}
	System.out.print("찾는정수:" + num);
	

}

continue문

public static void main(String[] args) {
		
		int num=0;
		int count = 0;
		
		while ((num++) < 100) {
			if (((num% 5) != 0) || ((num % 7) != 0))
				continue;
			
			count++;
			System.out.println(num);
		}
		
		System.out.println("count : " + count);
		
		
	}

배열

배열 합구하기

	public static void main(String[] args) {
		
		int[] arr = new int[1000];
		int sum  = 0;
		
		//입력
		for(int i = 0; i<arr.length; i++) {
			arr[i] += i+1;
		}
		
		//합구하기
		for (int num : arr) {
			sum += num;
		}
		
		System.out.println(sum);
		System.out.println(Arrays.toString(arr));
	}

배열 랜덤 숫자 중 최대값

public static void main(String[] args) {
		
		int[] arr = new int[10];
		int max= 0;

		for(int i =0; i<arr.length; i++) {
			arr[i] = (int)(Math.random()*100)+1;
			
			if(arr[i] > max) {
				max = arr[i];
			}
			
}
		System.out.println(max);
		System.out.println(Arrays.toString(arr));

구구단

입력받아 구구단

public static void main(String[] args) {
		Scanner sc=  new Scanner(System.in);
		int num = sc.nextInt();
		for(int i= 1; i<10; i++) {
			System.out.println( num + "x" + i + "=" + num*i);
		}
}

짝수 구구단

for (int i = 2; i < 10; i++) {
		if (i % 2 == 0) {
			for (int j = 1; j < 10; j++) {
				System.out.println(i + "x" + j + "=" + (i * j));
			}
		}
	}

	for (int i = 2; i < 10; i++) {
		if (i % 2 != 0) {
			continue;
		}
			for (int j = 1; j < 10; j++) {
				System.out.println(i + "x" + j + "=" + (i * j));
			}
		}

별찍기


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

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

    	for (int i = 5; i > 0; i--) {
		for (int j = 0; j < i; j++) {
			System.out.print("*");
		}
		System.out.println();
	}
    

for (int i = 1; i <= 5; i++) {
			for (int j = 5; j > i; j--) {
				System.out.print(" ");
			}
			for (int j = 1; j <= i; j++) {
				System.out.print("*");
			}
			System.out.println();
		}

for (int i = 1; i < 10; i += 2) {
			for (int j = 9; j > i; j -= 2) {
				System.out.print(" ");
			}
			for (int j = 0; j < i; j++) {
				System.out.print("*");
			}
			System.out.println();
		}

입력받아 별찍기

public static void main(String[] args) {
		
	
		  // 입력받기
        Scanner sc = new Scanner(System.in);// 
        int num = sc.nextInt();

        // 별과 공백 찍기
        for (int i = 1; i <= num; i++) { 
            // 공백
            for (int j = i; j < num; j++)
                System.out.print(" ");

            // 별찍기
            for (int j = 1; j <= 2 * i - 1; j++)
                System.out.print("*");
            System.out.println(); //

        }
     }

로또 번호 무작위

public static void main(String[] args) {
	int lotto[] = new int[6];
	
	
	for(int i = 0; i<lotto.length; i++) {
	
		lotto[i] = (int)(Math.random()*45)+1;

		for(int j =0; j <i; j++) {
			if(lotto[i] == lotto[j]) {
				i--;
				break;
			}
		}
	
	}
	System.out.println(Arrays.toString(lotto));
}

숫자맞히기

public static void main(String[] args) {

		
		 // random 변수 생성
        Random random = new Random();
        final int RANDOM_NUM = random.nextInt(100);
        final int cnt = 10;

        // Scanner 생성
        Scanner sc = new Scanner(System.in);

        // 변수 맞추기
        for (int i = 0; i <= cnt; i++) {
            if (i == cnt) {
                System.out.println("찾지 못하였습니다.");
                break;
            }
            System.out.print("정답을 추측하여 보시오: ");

            int num = sc.nextInt();

            if (num < RANDOM_NUM)
                System.out.println("HIGH");

            else if (num > RANDOM_NUM)
                System.out.println("LOW");

            else {
                System.out.print("축하합니다. 시도횟수=" + (i + 1));
                break;
            }
        }		
profile
작성자 개인이 잊을 때마다 보라고 정리한 글

0개의 댓글