[Java] 캐스팅, 연산자, 반복문, 배열

킹발·2022년 9월 21일
0

Java

목록 보기
2/12
post-thumbnail

상수와 형변환(Casting)

상수

상수의 개념

final int SIZE = 100;
SIZE = 200;
  • 값을 한번만 저장할 수 있는 공간
  • 변경 불가
  • 키워드 final

예제) 반지름이 5인 원의 넓이를 구하시오

public class Ex {

	static final double SIZE = 3.14;
	
	public static void main(String[] args) {
	
		double area = Math.pow(5, 2) * SIZE;
		System.out.println(area);
	}
}

리터럴의 개념

int num = 10;
  • 변하지 않는 데이터
  • 우리가 기존에 알고 있던 상수
    • 프로그래밍에서의 상수 의 정의가 값을 한 번 저장하면 변경할 수 없는 저장공간 이기에 리터럴이란 용어를 도입
  • num 은 변수명, 10 은 리터럴

형변환

형변환(Casting) 이란?

  • 변수 또는 상수의 타입을 다른 타입으로 변환하는 것

형변환이 왜 필요한데?

  • 컴퓨터는 이진수만 처리한다
  • 두 피연산자의 자료형이 일치해야 동일한 방법을 적용해 연산 가능

형변환 방법

  • 타입)피연산자
  • 괄호()는 캐스트 연산자 or 형변환 연산자라고 하며, 형변환을 캐스팅(Casting) 이라고도 한다.
double d = 86.4;
int score = (int) d;
System.out.println("score=" + score);
System.out.println("d=" + d);

//결과
//score=85
//d=85.4
  • 출력된 d를 보면 형변환 후에도 피연산자에는 아무런 변화가 없다.

자동 형변환

  • 자동 형변환은 컴파일러가 알아서 해준다.
  • 기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환된다.

명시적 형변환

double pi = 3.1415;
int wholeNumber = (int)pi;
  • 명시적 형변환을 사용하면 컴파일러가 개발자가 의도적으로 한 것이라 판단하고 에러를 내지 않는다.

산술 변환

  1. 두 피연산자의 타입을 같게 일치시킨다. (보다 큰 타입으로 일치) 값 손실 최소화가 목표

    • long + int 👉 long + long 👉 long
    • float + int 👉 float + float 👉 float
    • double + float 👉 double + double 👉 double
  2. 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다. 오버플로우 방지 (JVM이 32bit이기 때문에)

    • byte + short 👉 int + int 👉 int
    • char + short 👉 int + int 👉 int
    • 정수형 👉 실수형으로 형변환을 할 때는 정밀도가 더 높은 double 로 변환해주자.

연산자

연산자의 이해

연산자

  • 3.14*radius*radius 에서 연산자는 *

연산자 우선순위에서 중요한 점

  • () 괄호는 최우선 연산자 - 실무에서 많이 쓰임
  • 결합 방향은 같은 우선 순위일 때 먼저 계산 하는 것

문자열 연산자

String str = "JDK" + 3 + 3.0;
// 출력 결과 : JDK33.0
  • 문자열과 숫자가 있으면, 문자열로 결합

삼항 연산자

  • 3개의 피연산자를 필요로 한다.

ex) 세수 중에서 가장 큰 값은?

int a = 10, b = 20, c = 30;
int result = ((a>b) ? a : b) > c) ? ((a>b) ? a : b) : c

반복문

while 문

  • while문은 한 번도 실행되지 않을 수 있다!
while(조건식) {
	// 조건식의 연산결과가 참(true)인 동안 반복될 문장들을 작성.
}

Do while 문

do {
	// 조건식의 연산결과가 참일 때 수행될 문장들을 적는다. (처음 한 번은 무조건 실행)
} while(조건식);

for 문

for(초기화 ; 조건식 ; 증감식) {
	System.out.println(num + " * " + i + " = " + num * i);
}

continue & break

break

특정 조건을 만족하면 반복문을 벗어나도록 한다.

문제 1) 5와 7의 배수중에 첫번째 숫자는 ?

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

continue

반복문 내에서만 사용될 수 있으며 반복이 진행되는 도중에 continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어간다.

StringBuilder sb = new StringBuilder();

int count = 0;
		
for(int i = 1; i <= 100; i++) {
	if(i % 5 != 0 || i % 7 != 0) continue;
			
	count++;
			
	sb.append(i).append('\n');
}
sb.append("count : ").append(count);
		
System.out.println(sb);
	i % 5 != 0 || i % 7 != 0 vs. num % 5 == 0 && num % 7 == 0        

배열

배열

배열이란?

  • 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것

배열의 선언과 생성

int[] score;        // 배열을 선언
score = new int[5]; // 배열을 생성

배열의 길이

  • 배열은 한번 생성하면 길이를 변경할 수 없기 때문에 배열이름.lenght 는 상수이다.

예제 문제

  1. 1000개의 배열을 만들고 순서대로 1~1000 값을 넣은 후에 해당 배열에 있는 전체 합을 구하시오.
public static void main(String[] args) {
    int[] arr = new int[1000];

    for (int i = 0; i < 1000; i++) {
        arr[i] = i+1;
    }

    int result = Arrays.stream(arr).sum();
    
    System.out.println("result = " + result);
}
  1. 배열의 크기는 10이고 해당 배열에 랜덤으로 정수를 넣은 뒤에 최댓값을 구하시오.
public static void main(String[] args) {
    int[] arr = new int[10];
    int max = 0;
    
    for (int i = 0; i < 10; i++) {
        arr[i] = (int)(Math.random() * 100) + 1;

        max = Math.max(max, arr[i]);
    }

    System.out.println("max = " + max);
}
  1. 배열의 크기는 6이고 1 ~ 45 숫자를 랜덤으로 넣고 출력하시오. (단, 중복되면 안 된다.)
public static void main(String[] args) {
    int[] arr = new int[6];

    for (int i = 0; i < 6; i++) {
        arr[i] = (int)(Math.random() * 45) + 1;

        for (int j = 0; j < i; j++) {
            if (arr[i] == arr[j]) {
                i--;
                break;
            }
        }
    }

    for (int n : arr) {
        System.out.println(n);
    }
}

0개의 댓글

관련 채용 정보