공부/Java

0506 연산자, 조건문, 반복문

Dev_YJ 2020. 5. 6. 23:59

*비교연산자

true/false 산출.

동등비교 연산자는 모든타입에 사용 가능.

크기 비교 연산자는 boolean 외 모든 기본타입에 사용가능.

*논리 연산자 : boolean 타입만 사용 가능.

|| : or

- a || b 일 때, 둘 중 하나만 true여도 결과는 true

&& : and

- a && b 일 때, a와 b 모두 true여야 결과가 true

! : not. boolean의 값을 역전시킨다.

- !(3<5)는 false, !(3>5)는 true

^ : 비트 연산을 할 때 1이 홀수개이면 1, 짝수개이면 0. 자기자신과 짝수번 연산하면 0, 홀수번 연산하면 자기자신.

5^6
(10진수)    (2진수)
5         =  101
6	  =  110
------------------xor
3         =  011

A와 B가 다를 때 참을 리턴사는 연산자이다. (암호화할 때 사용가능.)

 

*대입연산자 : 등호 오른쪽을 항상 먼저 계산한다. 

a = b       b의 값을 a에 대입
a += b		a = a + b와 동일
a -+ b		a = a - b
a *= b		a = a * b
a /= b		a = a / b
a %= b		a = a % b
a &= b		a = a & b
a ^= b		a = a ^ b
a |= b		a = a | b
a <<= b		a = a << b
a >>= b		a = a >> b
a >>> b		a = a >>> b
int num1 = 100;
System.out.println(num1);	//100

num1 = num1 + 200;		//num1 += 200 와 동일
System.out.println(num1);	//300

num1 += 200
System.out.println(num1);	//500

 

*증감 연산자 : 증가와 감소

-연산자가 피연산자 뒤에 붙는 경우

int a, b =4;
a = b++ +10;
결과 :  a=14, b=5 //b를 먼저 사용 한 후에 1증가.

-연산자가 피연산자 앞에 붙는 경우

int a, b = 4;
a = ++b +10;
결과 : a = 15, b = 5 //b를 먼저 1증가 한 후에 사용.

-예제

public class UnaryOperator {
	public static void main(String[] args) {
    	int opr = 0;
        opr += 3;	//opr = opr +3;
        
       	System.out.println(opr++);	//3
        System.out.println(opr);	//4
        System.out.println(++opr);	//5
        System.out.println(opr);	//5
        System.out.println(opr--);	//5
        System.out.println(opr);	//4
        System.out.println(--opr);	//3
        System.out.println(opr);	//3
      }
  }   
int a,b = 4;
a = b++ +10;
System.out.printf("a는 %d, b는 %d", a , b);
//결과 : a는 14, b는 5

 

*조건연산자 ?

세 개의 피연산자로 구성된 삼항(ternary) 연산자. 물음표 앞에는 참인지 거짓인지 판별할 수 있는 애가 온다.

if-else을 간결하게 표현할 수 있다.

int x = 5;
int y = y;

int s;
if(x>y)	s = 1;	
else s = -1;	//실행문장이 단일인 경우 {} 생략 가능.
    
-------------------
in s = (x>y)? 1 : -1;
int x = 10, y = 3;
int s = (x>y)? 1 : -1;
System.out.println(s);	//결과는 1

String result = (x%2)? "짝수" : "홀수";
System.out.println(result);	//짝수 홀수 구분해서 출력.

 

*조건문(conditional statement)

특정 조건일 때 코드를 실행하는 문법. (if, else, else if 등의 명령키워드를 사용.)

ex) if잠금 해제 패턴이 5회 틀리면 1시간 동안 대기상태로.

- 단순 조건문 : if 다음의 괄호안에 조건식 입력. 실행문장이 단일 문장이면 { , } 생략가능.

true인 경우, if문을 벗어나 다음 문장 실행.

false인 경우, if 다음 문장이 실행되지 않고 if문을 빠져나옴.

-예제

시험 점수를 사용자에게 입력받아 80점 이상이면 합격을 판별하는 프로그램 만들기.

Scanner sc = new Scanner(System.in);
System.out.println("점수를 입력하시오.");
int score = sc.nextInt();
if (score>=80) {
System.out.println("합격입니다.");
		}

- if-else문

if(조건식) {
		실행문장1
    }
else {
		실행문장2
	}

조건식이 true면 실행문장1 실행 후 if-else문을 벗어남.

            false면 실행문장2 실행 후 if-else문을 벗어남.

-예제

입력된 수가 3의 배수인지 판별하는 프로그램 작성하기.

int score = sc.nextInt();
if ((score%3) == 0) {
		System.out.println("3의 배수입니다.");
	}
else	{
		System.out.println("3의 배수가 아닙니다.");
	}
    
//또는
System.out.println((score%3)==0? "3의 배수입니다." : "3의 배수가 아닙니다.");

- 다중 if문

실행문장이 다시 if문 또는 if-else문을 포함. 조건문이 너무 많은 경우, switch문 사용권장.

if (score>=90) {
		System.out.println("학점은 A입니다.");
	}	
	else if(score>=80) {
		System.out.println("학점은 B입니다.");
	}
	else if(score>=70) {
		System.out.println("학점은 C입니다.");
	}
	else if(score>=60) {
		System.out.println("학점은 D입니다.");
	}
	else if (score>=50) {
		System.out.println("학점은 E입니다.");
	}
	else {
		System.out.println("학점은 F입니다.");
	}

-예제

로그인 프로그램 : 변수는 직접 저장하고, 아이디와 패스워드가 틀리면 각각 적당한 메세지 출력. id는 dubu 비번은 0528

		String id = "dubu";
		String pw = "0528";
		
		Scanner in = new Scanner(System.in);
		System.out.println("id와 비밀번호를 입력하시오.");
		String keyId = in.next();
		String keyPw = in.next();
		
		if (id.equals(keyId)) {
			if (pw.equals(keyPw)) {
				System.out.println("로그인에 성공했습니다.");
			}
			else {
				System.out.println("비밀번호를 확인하세요.");
			}
		}	
		else {
			System.out.println("회원 정보를 확인하세요.");
		}

**문자열을 비교할 때는 equals() 메소드를 써야한다. (==는 참조값을 비교하는 것.)

위 문제를 &&연산자를 사용해 풀어보면.

if (id.equals(keyId) && (pw.contentEquals(keyPw))) {
	System.out.println("로그인에 성공했습니다.");
	}
else if (id.equals(keyId)) {
	System.out.println("비밀번호를 확인하세요.");
	}
else {
	System.out.println("회원 정보를 확인하세요.");
	}

-switch 문

식과 case문의 값을 비교하여 일치하면 해당 case문의 실행문장 수행. 일치하는 것이 없으면 default문 실행.

break를 만나면 switch문을 벗어난다.

-예제

학점이 A,B인 학생에게는 "참 잘했음", 학점이 C,D인 학생에게는 "좀 더 노력해", 학점이 F인 학생에게는 "다음 학기에 다시 만나요"를 출력하는 프로그램 작성하기.

Scanner gr = new Scanner(System.in);
System.out.println("학점을 입력하시오.");
		
	char grade = gr.next().charAt(0); //값을 char(한자리)로 만들어 주는 것.  
		
	switch (grade) {
		case 'A' : 
			
		case 'B' : 
			System.out.println("참 잘했음.");
			break;
		case 'C' :
		case 'D' : 
			System.out.println("좀 더 노력해.");
			break;
		case 'F' :
			System.out.println("다음 학기에 다시 만나요.");
			break;
			}

charAt(0) 가장 첫글자를 불러온다. index는 항상 0부터 첫자리. char는 큰따옴표(")가 아니라 작은따옴표(')

-예제2

음료수 자판기 : 메뉴 1번은 coke, 2번은 sprite, 3번은 redbull인 자판기. 번호를 입력받아 해당 메뉴를 출력하기.

Scanner bm = new Scanner(System.in);
System.out.println("메뉴번호를 입력하시오.");
int menu = bm.nextInt();
switch (menu) {
	case 1 : 
		System.out.println("coke");
		break;
	case 2 : 
		System.out.println("sprite");
		break;
	case 3 :
		System.out.println("redbull");
		break;
    default : 
    	System.out.println("wrong choice");
	}
bm.close();

 

*반복문

- for 문 : for(초기식 ; 조건식 ; 증감식) { 반복실행문(들);  }

초기식 : for문이 실행 한 후 오직 한번만 실행되는 초기화 작업. 

           콤마(,) 로 구분하여 여러 문장 가능. 초기화 할 일이 없으면 비워 둘 수 있다.

조건식 : 논리형 변수나 논리 연산만 가능. 비어있으면 true로 간주한다.

           true면 반복, false면 반복 종료. = 조건식이 참일 동안 반복한다.

증감식 : 반복 작업 문장들의 실행 후 처리작업. 콤마(,) 로 구분하여 여러 문장 가능.

          증감식 후 다시 조건식으로 간다.

         증감식을 안쓰면 무한히 반복되는 무한루프가 된다.

-예제

"Hello world" 100번 출력하기.

for(int count = 1; count<=100; count++){
	System.out.println("Hello World");
    }

1부터 5까지의 합을 구하시오.

int total = 0;
for(int i = 1; i<=5; i++) {
		total += i;
	}
System.out.printf("1부터 5 까지의 합은 %d입니다.",total);

구구단 5단 출력하기. 형식은 5 * n = 5n 

for(int i = 1; i<=9; i++) {
	System.out.printf("5 * %d = %d ",i,5*i);
	}

-연습문제

1. 1 - 100까지의 정수의 합을 구하여 출력하시오.
2. 1 - 100까지 홀수들의 합을 구하여 출력하시오.
3. 1 - 100까지 짝수들의 합을 구하여 출력하시오.

//1번
	int total = 0;
	for(int i = 1; i<=100; i++) {
		total += i;
	}
	System.out.println("1-100까지의 정수의 합은 " + total);
		
//2번
	int total_odd = 0;
	for(int i = 1; i<=99; i=i+2) {
		total_odd += i;
	}
	System.out.println("1-100까지의 홀수의 합은 " + total_odd);
		
//3번
	int total_even = 0;
	for(int i = 2; i<=100; i +=2) {
		total_even += i;
	}
	System.out.println("1-100까지의 짝수의 합은 " + total_even);

// for문 안의 int i는 for문이 시작하면서 생기고 for가 종료되면 사라지기 때문에 여러번 반복해서 사용 가능.

'공부 > Java' 카테고리의 다른 글

0511 연습문제, 예외문  (0) 2020.05.12
0508 분기문, 메소드, 문자열, 배열  (0) 2020.05.10
0507 반복문, 연습문제  (0) 2020.05.10
0501  (0) 2020.05.02
0429  (0) 2020.04.30