본문 바로가기
국비 학원 가서 개발새발

국비학원 1일차) 변수, 연산자, 조건문(if, switch)...

by 휴일이 2022. 9. 26.

 

 

클래스명은 대문자 시작이 관례

변수는 소문자 시작이 관례

 

RAM = 데이터 저장 공간

변수는 하나의 값을 저장할 수 있는 메모리 번지

정수에는 정수, 실수에는 실수 데이터 값만 저장이 가능하다

 

 

변수를 선언하고, 이름을 정하고, 값을 저장한다. 

 

int a;

a = 90

 

또는

int a = 90;

int형인 a라는 변수에 90이라는 값을 저장한다 라는 뜻

= 는 수학에서의 이퀄이 아니라 이걸 저장하겠음! 이라는 뜻

 

타입 메모리 크기 분류
byte 1 byte 정수
short 2 byte 정수
char 2 byte 정수
int 4 byte 정수
long 8 byte 정수
float 4 byte 실수
double 8 byte 실수
boolean 1 byte 논리(true/false)

1 byte = 8bits (8칸의 공간)

1 byte -> byte, boolean

2 byte -> char, short

4 byte -> int, float

8 byte -> long, double

 

byte < short, char < int < long < float < double

 

값의 허용 범위가 작은 타입이 큰 타입으로 자동 타입 변환된다

예)

byte byteValue = 10;

int intValue = byteValue; // 자동 타입 변환

 

정수가 실수로 대입되면, 자동으로 타입 변환이 된다

->실수가 정수보다 허용 범위가 더 크기 때문

 

long longValue = 5000000000L;

float floatValue = longValue; //5.0E9f

double doubleValue = longValue; //5.0E9

 

char 가 int로 변환되면 유니코드 타입이 int에 입력된다

char a = 'A';

int b = a; //A의 유니코드 65가 저장됨

 

 

강제 타입 변환

int는 byte보다 큰 허용 범위를 가지기 때문에

int가 byte로 타입을 변환한다면? 강제 변환을 시켜야 한다

int a = 10;

byte b = (byte)a; //강제 타입 변환

 

그러나, 강제 타입 변환은 거의 사용하지 않음

강제로 타입변환하며 오류가 생길 수 있기 때문

 

String(문자열)을 타입 변환할 경우

----.parse---- 해주면 됨

 

String str = "30";

int value = Integer.parseInt(str); (int만 Integer로 들어감)

String str1 = "12.3";

double value1 = Double.parseDouble(str1);

String str2 = "true";

boolean value2 = Boolean.parseBoolean(str2);

 

요런 느낌

 

 

기본 타입 값을 문자열로 변환하는 경우

String.valueOf(기본타입값);

 

int a = 10;

String str = String.valueOf(a);

a의 값은 "10" 이 된다(숫자 아닌 문자열이 됨)

 

 

 

변수값을 출력할 때 사용하는 System.out.~~~

메소드 의미
println(); 괄호 출력 후 행을 바꿔라(엔터)
print(); 괄호 출력하라(엔터X)
printf("형식 문자열",값1,값2...); 형식 문자열에 맞춰 뒤에 값 출력

 

printf() 사용할 때

%d(정수),%f(실수), %s(문자열)... 등이 있음

 

 

키보드 입력 데이터를 변수로 저장

 

Scanner scanner = new Scanner(System.in);

scanner 변수 선언, Scanner 객체 생성

 

입력받은 값을 타입별로 저장이 가능한데

int a;

a = scanner.nextInt();

 

문자열의 경우

next(), nextLine() 으로 나뉜다

next의 경우 \n 이 포함되지 않아서

엔터를 아무리 쳐도 문자열이 포함되기 전까지는 입력받지 않음

nextLine()의 경우 \n이 포함되어서

아무것도 안 치고 엔터만 해도 값을 입력 받음

 

 

 

기본 타입 값이 동일한지 비교할 때는 == 를 사용하지만

String 타입 값이 동일한지 알려면 equals()를 사용한다

 

String a = "가나다";

System.out.println(a.equals("가나다"));

값->true

System.out.println(a.equals("가가가"));

값->false

 

 

 

+ 피연산자 부호 유지

- 피연산자 부호 변경

++ 피연산자 값 1 증가

-- 피연산자 값 1 감소

++i // i의 값에 1을 더함

i++ // 다른 연산 수행 후 1증가

 

int i = 1;

i++ + 10 = 11;

i = 2;

 

 

+ 더하기

- 빼기

* 곱하기

/ 나누기

% 나눈 것의 나머지 (num%3 <-num을 3으로 나눈 나머지 값 출력)

 

 

산술 연산은

정수 타입은 결과는 int

단, 정수 타입인데 하나가 long 타입이라면 결과는 long

산술 중 하나라도 실수가 포함되어 있으면 결과는 실수 타입

 

 

오버플로우, 언더플로우

최대값에서 +1 하면 최소값으로 넘어감(오버플로우)

최소값에서 -1 하면 최대값으로 넘어감(언더플로우)

 

byte(-128~127)

byte value = 127;

value++;

byte value 출력하면 -128

 

 

정확한 계산은 정수 연산으로 하는 것이 좋다

 

 

나눗셈(/)이나 나머지값(%) 계산할 때

우측이 0 이라면 예외가 발생한다

5/0

5%0 //예외(에러)

 

하지만,

0.0으로 하면 연산 결과는

5/0 //Infinity 무한대

5%0 //Nan Not a number

 

여기서 더 계산하면 안된다요

 

 

비교 연산자

연산식 설명
== 두 값이 같은가
!= 두 값이 다른가
> 왼쪽이 더 큰가
>= 왼쪽이 크거나 같은가
< 오른쪽이 큰가
<= 오른쪽이 크거나 같은가

 

 

단, 문자열 비교는

equals() 또는 !equals() 를 사용한다

 

 

(AND) && 피연산자 결과가 전부 true일 경우에만 true

(OR) || 피연산자중 하나라도 true면 true

(XOR) ^ 하나는 true, 하나는 false라면 true

(NOT) ! 논리값을 바꿈, true는 false, false는 true

 

 

삼항(조건) 연산자

 

조건식 ? 값또는연산식1 : 값또는연산식2

조건식이 맞을 경우true 1을

조건식이 틀릴 경우false 2를 선택한다

 

int score = 85;

char grade = (score>90)? 'A' : 'B'

grade는 B

 

int score = 60;

char grade (score>90)? 'A' : ((score>80) ? 'B' : 'C');

grade 는 C

 

 

if문

if (조건식) {

실행문;

실행문;

}

실행문이 하나라면 중괄호 생략해도 좋으나

버그 발생할 수 있으니 그냥 한 줄 이어도 붙이는 것이 좋다

 

if(조건식) {

실행문;

} else {

실행문

}

 

조건식이 맞지 않다면

else 문을 실행

 

if(조건식) {

실행문;

} else if(조건식) {

실행문

} else {

실행문

}

 

if(조건식이 false일 경우) {

실행안됨;

}

else if(얘가 true면 얘가 실행되고) {

실행문;

} else {

모든 조건문이 false면 else의 실행문 실행;

}

 

 

주사위 번호 뽑기를 할 때

int num = (int)(Math.random()*6)+1

에서 +1을 하는 이유는 -> 0을 안 뽑게 하기 위해 +1을 더해줌

 

 

 

 

switch문

 

switch는 괄호 안의 변수 값에 따라

해당 case로 가서 실행문을 실행시킨다

해당하는 case가 없다면 default 를 실행시킨다(default 생략 가능)

break;가 안 쓰이면 해당 case 아래의 실행문을 쭈르르 실행시키기 때문에

실행문 뒤에는

break를 써준다

 

switch(변수) {

case 변수값:

실행문

break;

case 변수값:

실행문

break;

case 변수값:

실행문

break;

default:

실행문

}

 

switch 괄호에는 정수와 문자열이 올 수 있으며

 

case 변수:

case 변수:

실행문

 

이렇게 여러 변수가 해당할 때 실행시키는 것도 가능하고

 

switch(변수) {

case 'A','a' -> {

실행문;

}

case 'B','b' -> {

실행문;

}

이렇게도 가능하다,

if문과 마찬가지로 실행문이 하나라면 중괄호 생략도 가능하다

 

 

switch 예제1 == 예제2

 

switch 예제1

String grade = "B";

int score = 0;

switch(grade) {

case "A":

score = 100;

break;

case "B":

score = 80;

break;

defulat:

score = 70;

}

 

switch 예제2

String grade = "B";

 

int score = switch(grade) {

case "A" -> 100;

case "B" -> 80;

defulat -> 70;

}

 

둘 다 score의 값은 80으로 출력 된다

 

 

if문 예제(점수 입력해서 등급 받기)

 

package sesond;

import java.util.Scanner;

public class ElseIf {

	public static void main(String[] args) {
		int jumsu;
		Scanner sc = new Scanner(System.in);
		System.out.print("점수를 입력하세요 :");
		
		jumsu = sc.nextInt();
		
		if(jumsu>=90) {
			System.out.println("A");
		} else if(jumsu>=80) {
			System.out.println("B");
		} else if(jumsu>=70) {
			System.out.println("C");
		} else if(jumsu>=60) {
			System.out.println("D");
		} else {
			System.out.println("F");
		}
		
	}

}

 

 

switch문 예제) 계산기 만들기

 

package sesond;

import java.util.Scanner;

public class SwitchTest3 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int a,b;
		String c;
		
		System.out.print("숫자를 입력하세요 :");
		a = sc.nextInt();
		
		System.out.print("숫자를 입력하세요 :");
		b = sc.nextInt();
		
		System.out.print("부호를 입력하세요");
		c = sc.next();
		
		switch(c) {
		case "+" :
			System.out.println(a+b);
			break;
		case "-" :
			System.out.println(a-b);
			break;
		case "*" :
			System.out.println(a*b);
			break;
		case "/" :
			System.out.println((float)a/b);
			break;
			default:
				System.out.println("계산 불가");
		}
		
	}

}

 

 

if문 예제) 계산기 만들기

 

package sesond;

import java.util.Scanner;

public class El {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int a;
		int b;
		String c;
		
		System.out.print("첫번째 숫자 : ");
		a=sc.nextInt();
		System.out.print("두번째 숫자 : ");
		b=sc.nextInt();
		System.out.print("부호를 입력하세요 : ");
		c=sc.next();
		
		if(c.equals("+")) {
			System.out.println(a+b);
		} else if(c.equals("-")) {
			System.out.println(a-b);
		} else if(c.equals("/")) {
			System.out.println((float)a/b);
		} else if(c.equals("*")) {
			System.out.println(a*b);
		} else {
			System.out.println("계산 불가");
		}
		
		
	}

}
728x90