
- 타입 변환 (형 변환)
연산은 기본적으로 같은 타입의 피연산자와 수행한다.
서로 다른 타입의 피연산자가 있을 경우 두 피연산자 중 크기가 큰 타입으로 자동으로 변환된다.
※ 같은 크기 일 때 정수 < 실수 < 문자열 순이다.
- 강제 타입 변환 (강제 형 변환)
(타입 변환할 자료형 타입) 변수명;
ex) int -> byte (byte) 변수명
타입 변환 사용해보기!
public class TypeConv1 {
public static void main(String[] args) {
byte var1 = 10;
int var2 = var1; // 자동 형변환 (작은공간 -> 큰 공간)
System.out.println(var2);
int var3 = 128;
byte var4 = (byte)var3; // 강제 형변환 ( 큰 공간 -> 작은 공간)
System.out.println(var4); // -128 출력 (byte의 값보다 크기 때문에, byte: -128~127)
char var5 ='A'; // 2byte 유니코드
int var6 = var5; // char -> int (자동 형변환)
System.out.println(var6); // 아스키 코드값으로 출력
int var7 = 10;
double var8 = 3.0;
int var9 =3;
System.out.println(var7 / var9); // 정수 / 정수 = 정수
System.out.println(var7 / var8); // 정수 / 실수 = 실수
}
}
var2의 경우 작은 공간에서 큰 공간으로 변환시켜주어서 잘 나오는 것을 확인할 수 있다.
var3 =128은 byte의 공간보다 크기 때문에 넘쳐서 128이 아닌 -128이 나오는 것을 확인할 수 있다.
문자의 경우 각 문자마다 대응되는 숫자가 있다. 따라서 char형인 문자를 int에 담아주면 아스키코드에 맞추어 숫자(65)가 출력되는 것을 확인할 수 있다.
✔️ Scanner 클래스
자바에서 여러 가지 데이터를 입력받을 수 있도록 도와주는 대표적인 입력 관련 클래스이다.
java.util 패키지에 존재한다.
✔️ 변수와 객체
변수
Stack에 저장된다.
객체
Heap에 값이 저장되고 그 주소 값이 Stack에 참조 변수의 이름으로 저장된다.
클래스이름 변수이름(참조변수) = new 생성자명();
Stack : 기본적으로 저장되는 공간
Heap : String 같은 여러 데이터들을 저장하기 위한 공간
✔️ String 클래스
String str = new String("자바");
String str = "자바"; // 리터럴 표기법, 클래스(Heap에 저장)
== (같다, Stack에서만 가능(주소 비교))
. equals(클래스의 같다 비교 시 사용, Heap에서만 가능)
String str1 = "자바";
String str2 = str1;
위 두 개는 == 로 비교하면 같다가 나옴 (주소를 전달해준 것이기 때문에 Stack에 있는 참조 변수의 주소가 같기 때문임.)
- 제어문
프로그램의 흐름을 제어하는 문장을 의미한다.
1. if문
if문 (조건식) 조건식의 결과가 true인 경우 실행할 문장;
if문 (조건식) {
조건식의 결과가 true인 경우 실행할 문장;
...
}
첫 번째의 경우는 문장이 하나일 때 사용하고, 두 번째의 경우는 실행할 문장이 하나 이상인 경우에 사용한다.
두 번째의 경우에는 { } (중괄호) 안에 있는 문장이 다 실행되어야 if문을 벗어난다.
* if ~ else 문과 if ~ else if 문
if (조건식) {
조건식의 결과가 true인 경우 실행할 문장;
...
} else {
조건식의 결과가 false인 경우 실행할 문장;
...
}
if(조건식) {
조건식1의 결과가 true인 경우 실행할 문장;
...
} else if (조건식2) {
조건식2의 결과가 true인 경우 실행할 문장;
...
} else {
위의 조건식의 결과 모두가 false인 경우 실행할 문장;
...
}
첫 번째의 if ~ else문은 조건식 하나로 true, false가 나뉘는 경우에 사용한다.
두 번째의 if ~ else if문은 여러 조건식으로 true, false가 나뉘고 마지막에 모든 조건식의 결과가 false인 경우에 실행하는 문장을 넣을 수 있다.
if문을 이용한 성적 프로그램 만들기!
import java.util.Scanner;
public class example {
public static void main(String[] args) {
/* 성적 프로그램
1. 3과목 변수를 만들어 값을 입력받음 (Scanner를 사용)
2. 위 점수를 변수에 저장하고 총점과 평균, 학점을 구함
ex) kor + math + com, (kor + math +com) / 3
단, 학점은 평균을 기준으로 90점이상은 A, 80점이상은 B, 70점 이상은 C,
60점 이상은 D 나머지 F
*/
Scanner sc = new Scanner(System.in);
System.out.print("국어 점수를 입력하세요 : ");
int kor = sc.nextInt();
System.out.print("수학 점수를 입력하세요 : ");
int math = sc.nextInt();
System.out.print("영어 점수를 입력하세요 : ");
int eng = sc.nextInt();
System.out.println();
int sum = kor + math + eng;
double avg = sum / 3.0;
System.out.println("성적의 총점 : " + sum);
System.out.println("성적의 평균 : " + avg);
if(avg >= 90) {
System.out.println("A학점 입니다.");
} else if (avg >= 80) {
System.out.println("B학점 입니다.");
} else if (avg >= 70) {
System.out.println("C학점 입니다.");
} else if (avg >= 60) {
System.out.println("D학점 입니다.");
} else {
System.out.println("F학점 입니다.");
}
}
}
2. switch문
if문과 비슷하지만 조금 더 정형화된 형태를 가지고 있다.
특정 값과 일치하는 값을 찾아 실행한다.
switch (변수) {
case 값1 :
값1 == 변수 일 경우 실행할 문장;
...
break;
case 값2:
값2 == 변수 일 경우 실행할 문장;
break;
...
default:
값이 변수와 모두 다를 경우 실행할 문장;
}
switch문을 이용해 월을 입력했을 때, 월에 맞는 마지막 날 출력하기!
import java.util.Scanner;
public class example {
public static void main(String[] args) {
// Switch문으로 월 입력 시 일 출력
Scanner sc = new Scanner(System.in);
System.out.print("월 을 입력하세요 : ");
int month = sc.nextInt();
switch (month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
System.out.println("31일");
break;
case 4: case 6: case 9: case 11:
System.out.println("30일");
break;
case 2:
System.out.println("28일 또는 29일");
break;
default:
System.out.println("1~12까지 숫자를 입력하세요!");
break;
}
}
}
switch문을 이용해 성적 프로그램 만들기!
import java.util.Scanner;
public class example {
public static void main(String[] args) {
/* 성적 프로그램
1. 3과목 변수를 만들어 값을 입력받음 (Scanner를 사용)
2. 위 점수를 변수에 저장하고 총점과 평균, 학점을 구함
ex) kor + math + com, (kor + math +com) / 3
단, 학점은 평균을 기준으로 90점이상은 A, 80점이상은 B, 70점 이상은 C,
60점 이상은 D 나머지 F
3. switch문으로 작성
*/
Scanner sc = new Scanner(System.in);
System.out.print("국어 점수를 입력하세요 : ");
int kor = sc.nextInt();
System.out.print("수학 점수를 입력하세요 : ");
int math = sc.nextInt();
System.out.print("역사 점수를 입력하세요 : ");
int his = sc.nextInt();
int sum = kor + math + his;
double avg = (sum / 3);
int con = (int)(avg / 10);
System.out.println("성적 총점 : " + sum);
System.out.println("성적 평균 : " + avg);
System.out.print("학점은 ");
switch(con) {
case 10: case 9:
System.out.println("A학점 입니다.");
break;
case 8:
System.out.println("B학점 입니다.");
break;
case 7:
System.out.println("C학점 입니다.");
break;
case 6:
System.out.println("D학점 입니다.");
break;
default:
System.out.println("F학점 입니다.");
break;
}
}
}
switch문은 if문과 다르게 범위를 지정할 수 없다. 숫자의 경우 딱 떨어지게 조건을 주어야하기 때문에 double형인 avg를 10으로 나누고 그것을 int형으로 바꾸어주어서 소수점 아래 자리를 날려주어 딱 떨어지게 조건을 준다.
'국비 > JAVA' 카테고리의 다른 글
DAY 05 : 메소드, 객체지향 프로그래밍, 클래스, 생성자 (0) | 2022.10.04 |
---|---|
DAY 04 : 2차원 배열, 향상된 for문, String클래스 (1) | 2022.10.03 |
DAY 03 : 반복문, 중첩 반복문, 배열 (0) | 2022.10.03 |
DAY 01 : 연산자 (0) | 2022.09.28 |
DAY 01 : JAVA, 주석, 변수 (1) | 2022.09.23 |