상수와 형변환
상수란?
•
변수에 값을 딱 한번 할당 할 수 있으면 상수
•
변경이 불가하다.
•
키워드 final선언이 붙는다
•
상수에 대한 변수명은 켐멜표기법이 아닌 반드시 대문자를 사용함
•
메모리주소값이 고정된다.
•
상수명을 대문자로 짓기 때문에 합성어와 같은 경우 스네이크((ex)arr_num) 표기법을 사용한다.
•
처음으로 값을 할당되는 것에 대해서는 상관이 없음
•
하지만 한번 더 값을 할당(변경)하는 경우에는 에러발생
ㄴ리터럴이란?
•
변수에 넣는 변하지 않는 데이터
•
메모리 위치 안의 값을 의미한다.
ex) final int num = 1; // num은 상수이고 1은 10진수 정수 리터럴
string str = '이름'; // str은 변수이고 '이름'은 문자열 리터럴
형변환(캐스팅)이란?
형변환의 대전제
컴퓨터는 연산시 데이터 타입을 맞추어야한다.
ㄴ자동형변환이란?
자료형의 크기가 큰 방향으로 정수보다는 실수 형으로 소수점을 보전하는 형태로 변환된다.
byte < short = char < int < long < float < double
→ int + long 의 경우 이 둘 중에 형변환을 시켜 계산하게 됨
이의 경우 long으로 형변환하게 됨 → long이 더 타입이 커서
값을 보존하기 위해서는 long으로 형변환 해야함
→ long → float(실수) 가는 이유
소수점을 보전하기 위해서
ㄴ명시적(강제)형변환?
int wholeNumber = (int)PI;
Java
복사
(int)를 사용해서 강제형변환을 시킬 수 있음 하지만 이의 경우
4byte 정수를 허용하기 때문에 PI의 소숫점값이 없어짐
short s1 = 10;
short s2 = 20;
short s3 = (short)(s1 + s2);
int s4 = s1 + s2;
Java
복사
int 범위 이하에 대해서는 두 수를 더하게 되면 형변환이 일어난다
int 로 형변환이 일어남 아니면 short로 강제형변환을 시켜야함
연산자와 피연산자 개념
연산자 가장 우선순위가 큰 것 ()
/ 은 나누는것
% 이는 나눈것의 나머지 표현
문자열 연산자
문자열과 숫자(정수나 실수)가 있으면, 문자열로 결합한다.
두개의 다른 데이터 타입이 연산을 할 경우 형변환이 일어남
문자열 + 실수 = 문자열로 캐스팅 숫자를 문자로 인식함
•
복합 대입 연산자
++x =x의 값이 사용된 후 증가한다
x++=x의 값이 사용되기 전에 증가된다
•
관계 연산자 및 논리 연산자
&& | AND 연산 |
|| | OR 연산 |
! | NOT 연산 |
전위연산&후위연산
int x = 1;
int a = x++; //a = 1 , x 값이 사용되기전에 증가된다. x = 2
int b = ++x; //b = 3 , x 값이 증가되고 사용된다.
// x == 3 이 된다
Java
복사
삼항 연상자
3개의 피연산자를 필요로함
value = (x > y)(조건) ? x(참) : y(거짓)
value = x > y ? x: y > z ? y : z // 같이 여러개도 사용가능
Java
복사
반복문
•
while
•
for
•
do while
While 문 예제
int num = 1;
int result = 0;
while (num < 11) {
result +=num;
num++;
}
System.out.println(result);
Java
복사
ㄴWhile 과 Do While 의 차이점
무조건 1번은 실행하는 것이 Do While 문
While 은 실행 안될 수도 있음
ㄴ for 문의 순서를 정확하게 알아야 한다.
for (int i = 0;(초기식) i < 3;(조건)i++(증감식)){
반복하는 문장
}
초기화 한번만 진행
조건문
반복하는문장 실행
증감식
Java
복사
•
for 문 예제(구구단)
초기화 구문은 한번만 타는 것임
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
for(int i =1; i <=9; i++){
System.out.println(num + "*" + i + "=" + num*i);
}
Java
복사
ㄴ continue & break
•
break 반복문 탈출
•
continue 조건검사로 이동
break문 예제 (5와 7의 최소공배수 구하기)
int num =1;
while(true){
if((((num%5) == 0) && ((num%7) == 0)){
System.out.println(num);
break;
}
Java
복사
continue문 예제
반복문의 중첩예제(구구단)
for (int i = 2; i < 10; i++) {
for (int j = 1; j < 10; j++) {
System.out.println(i + "x" + j + "=" + (i * j));
}
}
}
Java
복사
배열
int[] score = {1,2,3,4,5,6,7,8,9}
→ int[] score = new int[9]로 컴파일러는 인식
배열의 변수에는 첫번째 주소가 오고 연속되어 주소를 가진다.
for - each 반복문
for (int i : arr){
}
둘이 동일한 의미
for (int i = 0; i < arr.length; i++){
}
Java
복사
Arrays.toString(배열 이름) : 배열 출력 함수
과제
4 입력받으면 1 3 5. 7. 가운데 피라미드형 별찍기
import java.util.Scanner; // 입력을 위한 scanner 클래스
public class 과제0921 {
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();
}
}
}
Java
복사
숫자 추측 게임 랜덤으로 1~ 100 까지 중의 숫자 정해서 10회 시도해서 랜덤 변수 찾기
import java.util.Scanner; // 입력을 위한 scanner 클래스 불러오기
import java.util.Random; // random 상수를 뽑기 위한 Random 클래스 불러오기
public class 과제0921_숫자 {
public static void main(String[] args) {
// random 변수 생성
Random random = new Random();
int randomNum = random.nextInt(100);
// random 변수 확인
System.out.println("랜덤변수 : "+ randomNum);
// 변수 맞추기
for(int i=0; i<10; i++) {
System.out.print("정답을 추측하여 보시오: ");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
if(i==9) {
System.out.println("찾지못하였습니다.");
break;
}
if(num < randomNum)
System.out.println("HIGH");
else if(num > randomNum)
System.out.println("LOW");
else {
i+=1;
System.out.print("축하합니다." + " 시도횟수=" + i);
break;
}
}
}
}
Java
복사
토의해보기
•
다른방식으로 해볼 수는 없을까요?
◦
math.random() 사용하지 말고 random.nextInt()를 사용해보자!
◦
for문 말고 while로 작성해보자!
package week1;
import java.util.*;
public class Guess {
public static void main(String[] args) {
// TODO Auto-generated method stub
Random random = new Random();
int randomNum = random.nextInt(100);
int answer = 0;
int count = 0;
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("정답을 추측해 보시오: ");
answer = sc.nextInt();
count++;
if(randomNum == answer) {
System.out.println("축하합니다.! " + "시도횟수: " + count);
break;
}
else if(randomNum > answer) {
System.out.println("High!");
}
else if(randomNum < answer) {
System.out.println("Low!");
}
if(count > 9) {
System.out.println();
break;
}
}
}
}
Java
복사