본문 바로가기
개발자로 가는 길(국비지원과정)/1. Java

[210405목] 조건연산자, IF문, Switch-case문

by 레아Leah 2021. 4. 15.
반응형

·삼항 연산자: 피연산자가 3개인 것 

[조건식 ? 참일 경우의 값 : 거짓일 경우의 값]
a = a + 1;  와 마찬가지로 변수를 선언해줘야한다. 

변수명 = (조건식) ? 참일 경우의 값 : 거짓일 경우의 값; 

(조건식)으로는 참, 거짓의 값을 구할 수 있는 값으로 와야한다.  

 

 

 

[강제 형변환]

 

int a = 10;

 douvble d = 32.15; 

 

d = a; (O)

a = d; (X) 

 

a와 d는 데이터타입이 다르므로 대입할 수 없음. 

바꾸고자 하는 데이터타입을 (데이터타입)으로 적어서 변환 

==> 개발자가 필요로 의해 강제로 형 변환하는 것을 casting이라고 한다. 

 

a = (int)d; 

 

 

 

 

 

 

 

 

 

 

형 변환연산자인  (int) or (double)...은 1순위 연산자!  연산시 주의 int data = int(5 * 5 * 3.15);

 

데이터타입이 다른 두 타입을 연산을 위해 데이터타입이 (int->double) 자동으로 더 큰 데이터타입으로 변환하는 것을 promotion이라고 한다. 

 

 

 

 

 

 

 

 

 

value의 값이 1씩 증가

++value;//바로 사용가능  


value = value + 1; 또한 축약 가능하다! 
value += 1;

 

value = value - 1; 또한 축약 가능하다! 
value -= 1;

 

 

 

 

 

 

 

[IF 조건식]

 

버전1. 참만 신경쓸 경우 

더보기

if (조건식) {

   // 참일 때 실행할 문장 

}

 

버전2. 참과 거짓을 볼 경우 

더보기

if (조건식) {

   // 참일 때 

} else {

  // 거짓일 때

}

 

버전3. 

더보기

if(조건1) { 

 //참일 떄 

} else if(조건2) {

 // 조건 1은 거짓, 조건2는 참

} else if(조건3) {

 // 조건1, 2은 거짓, 조건3는 참

} else if(조건//) {

 ////

}

 

 

[if문 3가지 버전 연습]

 

 

[if 연습문제]

 

<내가 만든 코드>

실수한 부분으로 논리연산자(&&, ||)를 사용할 때,

변수 하나만 사용해야한다. 

 

각 과목의 점수를 뜻하는 변수 score1, score2에 걸린 조건이 같다고 if(score1, score2 > 40)은 NO!

 

if(avg >= 60 && score1 >= 40 && score2 >= 40) OK!

 

 

 

 

 

 

 

<깔끔한 코드>

 System.out.println("합격"); 대신 문자열 변수 result를 선언해 합격, 불합격을 출력함.

왜지? 어떻게지? 문자열은 저렇게 대입해도 되는건가? 

위에 보면 문자열 변수 result를 선언함, 이렇게 하면 일일이 System.out.println();을 사용하지 않고 출력할 수 있음. 

 

 

 

 

 

[Scanner를 이용해 키보드로부터 값을 입력받기]

키보드 장치와 프로그램을 연결하는 장치!

 

 

 

 

import java.util.Scanner; 

Scanner keyin = new Scanner(System.in); 

 

 

키보드로부터 값을 입력받기 위해선, [스캐너 변수 - 입력받을 수 있는 객체 생성 선언 - 입력 - (처리_우리가 안한 부분)]  

①스캐너 선언

Scanner keyin = new Scanner(System.in);

 

Scanner keyin = new Scanner(System.in);

keyin 키보드로부터 입력받는다는 뜻

 

②입력받을 변수 선언!

데이터타입에 맞게 int data; 혹은 double value; 

 

③키보드로 입력할 수 있게 함. 

변수명 = keyin.nextInt();  <==키보드로부터 정수를 입력받겠다! 

변수명 = keyin.nextDouble(); <==키보드로부터 실수를 입력받겠다! 

 

+추가설명 <표준입력과 표준출력>
키보드 입력을 받는 코드에서 등장한 'System.in'이라는 문장은 표준입력(Standard input)이라는 장치와 연결되어 있습니다. '표준입력'이란 일반적으로 컴퓨터의 '키보드'를 의미합니다.

 

 

키보드로부터 입력값을 받는다는 것을 사용자가 알기 어려우니까 데이터 입력시 안내멘트(System.out.print("입력해주세요. : " );)를 먼저 입력하고 다음 변수명 = keyin.nextInt();를 작성하는 것을 추천! 

 

 

 

 

 

 

 Scanner를 정리하자면 

① import java.util.Scanner; 맨 위에 입력

② Scanner keyin = new Scanner(System.in);

③ 키보드로부터 입력값을 받을 수 있는 객체 생성 ex) int data; or double data; 

④ System.out.println();을 이용해 키보드로부터 값을 입력 받을 수 있다는 사실을 사용자에게 알림.(필수는 아님)  

⑤ 변수명 = keyin.nextInt/Double(); <= 키보드로부터 입력받을 준비가 되었다는! 

 

 

 

[키보드로부터 값을 입력받은 값이 짝수인지 홀수인지 나타내는 문제]

내가 짠 코드.. 눙물ㅠㅠ 

 

 

입력받은 숫자로 하기때문에 숫자를 다시 입력받을 필요가 없음.

==> "데이터 입력시 안내멘트 다음 입력" 이 작업을 하지 않아도 된다는 말.  

 

a = -a; 처럼 value = value%2 == 0; 다시 넣을 필요없이 

if(   value%2 == 0  ) 안에 직접 넣으면 된다. 

 

 

<깔끔한 코드>

 

 

· 삼항연산자를 사용해 result = (value%2 ==0) ? "짝수": "홀수"; 해도 같은 값이 나온다. 

 

 

 

 

[문제: 평수 구하기]

내가 만든 코드 

 

 

<깔끔한 코드>

 

 

 

[문제: 닭, 돼지의 다리 갯수]

내가 짠 코드.. 

 

 

<깔끔한 코드>

 

 

 

 

[Switch]

더보기

switch(변수/수식_정수로 변환될수 있는 수식 혹은 문자열){

case 값1 : 명령문; break; 

case 값2 : 명령문; break; 

case 값3 : 명령문; break; 

case 값4 : 명령문; break; 

default : 명령문; 

}

 

break; 문장 밖으로 탈출해라. 개발자가 의도한 것이 아니라면 꼭 적어주기 아니면 다 출력됨

default : 어느 것에도 해당하지 않는 경우이며, break;가 필요없다.

 

 

 

 

String family = "sister";

값이 있어야 실행한다.

 

 

 

[보충수업]

 

switch 활용 예) 

왜 실행이 안되지.. 고민하지말고 타이핑을 잘했나 살펴보자 

switch에서 t를 default에서 ul의 순서를 바꿔서 10분 정도 소요;; 

 

 

switch 활용2 예) 

나누기 값을 구할 때는 casting해줘서 형변환: (double)num2

 

 

 

[문제: 3 과목의 점수를 입력받아 평균 점수를 구해 90점 이상 A, 80점 이상 B, 70점 이상  C, 60점이상 D, 나머지는 F학점을 switch~case 를 이용해 코드 작성]

<내가 짠 코드>지만 아닌 걸 알면서^^ 일단 되는데까지? 해봤지만 switch는 정수로 변환되는 값만을 취급하기때문에 여기까지.. 앞 자리에 앉은 컴공과 학생말을 엿들으면 101, 80 뭐 어쩌구 저쩌구 하던데.. 난 일단 여기까지 후훟

 

 

<깔끔코드>

(Switch~Case)에서 출력할 때, System.out.println("C"); 넣는 것 보다  문자열 변수 String score를 선언해 score = "A학점" 더 간단한게 가능! 

만점인 100일 경우 10에 해당되는 곳이 없기때문에 학점으로 나오지 않음

 

case 10 :  
case 9 : score = "A학점"; break;

 

"A학점"이 겹치는 경우는 생략 

 

 

 

[소수점 제어 방법] 

printf : 포맷, 줄 바꿈을 못함

형식 변환 문자열 : %f 실수, %d 정수, %c 캐릭터, %s 문자열 

%f : 실수형데이터를 출력하겠다

 

System.out.println("평균 : " + avg + ", 학점 : " + score);

System.out.printf("평균: %.2f, 학점 : %s%n", avg, score); 

 

%.2f" : ".2 소수점 두자리까지 나타내겠다"

 

 

 

· ctrl + a ==> ctrl + i 전체 선택 후 들여쓰기

· ctrl + space 자동완성

반응형