관리 메뉴

LC Studio

JAVA & Spring 강의 (자바 인강 2주차) 자바기초2 본문

Java/Java&Spring 기초 강의

JAVA & Spring 강의 (자바 인강 2주차) 자바기초2

Leopard Cat 2022. 3. 30. 14:59

자바의 연산자들

항과 연산자

  • 항(operand) : 연산에 사용되는 값
  • 연산자 (operator) : 항을 이용하여 연산하는 기호

 

대입 연산자 (assignment operator)

  • '='
  • 변수에 다른 변수나 값을 대입하는 연산자
  • 왼쪽에는 변수가 와야하고, 오른쪽에는 변수 or 식 or 값
  • ex) num = 1;

 

부호 연산자 

  • '+', '-'
  • 변수의 부호를 유지 하거나(+) 바꿈(-)

 

산술 연산자

 

 1. 사칙 연산자

  • + 더하기
  • - 빼기
  • * 곱하기
  • / 나누기
  • % 나머지

 2. 복합 대입 연산자 

  • +=  두항의 값을 더해 왼쪽 항에 대입 (num += 1) => num = num + 1;
  • -=  위와같음
  • *=  위와같음
  • /=  위와같음
  • %= 위와같음

증감, 감소 연산자

  • ++ 항의 값에 1을 더해줌, 앞에 뒤에 붙임에 따라 증감 순서가 달라짐
  • --  항의 값에 1을 빼줌, 위와같음

관계연산자

  • >
  • <
  • >=
  • <=
  • ==
  • !=

 

논리 연산자

  • && (and)
  • || (or)
  • ! (not)
package ch12;

public class LogicalTest {

	public static void main(String[] args) {
		
		int num1 = 10;
		int num2 = 20;
		
		boolean flag = (num1 > 0) && (num2 > 0);
		System.out.println(flag);
		
		flag = (num1 < 0) && (num2 > 0);
		System.out.println(flag);
		
		flag = (num1 > 0) || (num2 > 0);
		System.out.println(flag);
		
		flag = (num1 < 0) || (num2 > 0);
		System.out.println(flag);
		
		flag = !(num1 > 0);
		System.out.println(flag);
	}
}
package ch12;

public class ShortCircuit {

	public static void main(String[] args) {
		
		int num1 = 10;
		int i = 2;
		
		boolean value = ((num1 = num1 + 10 ) < 10) && ( ( i = i + 2 ) < 10);
		System.out.println(value);
		System.out.println(num1);
		System.out.println(i);
		
		value = ((num1 = num1 + 10 ) < 10) || ( ( i = i + 2 ) < 10);
		System.out.println(value);
		System.out.println(num1);
		System.out.println(i);
		
	}
}

조건 연산자

  • 조건식 ? 결과1 : 결과2;
  • ex) (100>10)? 1:2; -> 1
package ch13;

import java.util.Scanner;

public class ConditionTest {

	public static void main(String[] args) {

		int max;
		System.out.println("입력 받은 두 수중 큰 수를 출력하세요\n ");
		
		Scanner scanner = new Scanner(System.in);
		System.out.println("입력1:");
		int x = scanner.nextInt();
		System.out.println("입력2:");
		int y = scanner.nextInt();
		
		max = (x > y)? x : y;
		System.out.println(max);
	}
}

비트 연산자

  • ! 반전
  • & and
  • | or
  • ^ XOR
  • << 왼쪽 shift
  • >> 오른쪽 shift
  • >>> 오른쪽 shift
package ch13;

public class BitTest {

	public static void main(String[] args) {

		int num1 = 5;  	// 00000101
		int num2 = 10; 	// 00001010
				
		System.out.println(num1 | num2);
		System.out.println(num1 & num2);
		System.out.println(num1 ^ num2);
		System.out.println(~num1);
		
		System.out.println(num1 << 2);
		System.out.println(num1);
		System.out.println(num1 <<= 2);
		System.out.println(num1);
		
	}
}

조건문

if문 (만약에 ~~라면)

if(조건식){
  수행문;      // 조건식이 '참'인 경우에(조건에 맞는 경우) 수행문이 수행됨 
 }             // 조건식이 '참'이 아니면(조건에 맞지 않는 경우) 수행문이 수행되지 않음
package ch14;

import java.util.Scanner;

public class IfElseTest {

	public static void main(String[] args) {

		int age = 7;

		//Scanner scanner = new Scanner(System.in);
		//int age = scanner.nextInt();
		
		if( age >= 8) {
			System.out.println("학교에 다닙니다");
		}
		else {
			System.out.println("학교에 다니지 않습니다.");
		}
	}
}

if-else 문

 

  if(조건식1){
      수행문1;        // 조건식1이 '참'인 경우 수행하고 전체 조건문을 빠져나감
  }
  else if(조건식2){
      수행문2;        // 조건식2이 '참'인 경우 수행하고 전체 조건문을 빠져나감
  }
  else if(조건식3){
      수행문3;        // 조건식3이 '참'인 경우 수행하고 전체 조건문을 빠져나감
  }
  else{
      수행문4;        // 위 조건이 모두 해당되지 않는 경우 수행됨 (디폴트 조건)
  }

  수행문5;            // if-else if-else 문이 끝나면 수행됨

  가령 조건식2가 만족되면 수행문2 -> 수행문5  순으로 수행됨
package ch15;

public class IfElseIfElseTest {

   public static void main(String[] args) {
   	int age = 12;
   	int charge;
   	
   	if(age < 8){
   		charge = 1000; 
   		System.out.println("미 취학 아동입니다.");
   	}
   	else if(age < 14){
   		charge = 2000;
   		System.out.println("초등학생 입니다.");
   	}
   	else if(age < 20){
   		charge = 2500;
   		System.out.println("중, 고등학생 입니다.");
   	}
   	else{
   		charge = 3000;
   		System.out.println("일반인 입니다.");
   	} 
   	
   	System.out.println("입장료는 " + charge + "원입니다.");
   }
}

switch - case 문

특정 값이나, 문자열 비교하는 경우 좋음

아래는 숫자를 기준으로 비교하는 경우,

package ch16;

public class SwitchCaseTest {

	public static void main(String[] args) {

		int month = 10;
		int day;
		
		switch(month){
		
			case 1: case 3: case 5: case 7: case 8: case 10: case 12:
				day = 31;
				break;
			case 4: case 6: case 9: case 11:
				day = 30;
				break;
			case 2: 
				day = 28;
				break;
			default:
				day = 0;
				System.out.println("존재하지 않는 달 입니다.");
			
		}
		System.out.println(month + "월은 " + day + "일입니다.");
	}
}

아래는 문자를 기준으로 비교하는 경우,

package ch16;

public class SwitchCaseTest2 {

	public static void main(String[] args) {
		String medal = "Gold";
		
		switch(medal) {
		
			case "Gold":
				System.out.println("금메달 입니다.");
				break;
			case "Silver":
				System.out.println("은메달 입니다.");
				break;
			case "Bronze":
				System.out.println("동메달 입니다.");
				break;
			default:
				System.out.println("메달이 없습니다.");
				break;
		}

	}
}

Switch Expression문

java14부터 지원

식으로 표현하여 return 값을 받을 수 있다.

switch문 안에서 return이라 적지 않고, yield라 적는다.

return값이 없으면 에러가 발생한다.

아래 예시는 int day에 대한 값을 Switch Expression문을 통해 받았다. 

package ch16;

public class SwitchCaseUpTest {

	public static void main(String[] args) {
		
		int month = 3;
		
		int day = switch (month) {
	    	case 1, 3, 5, 7, 8, 10,12 -> {
	    		System.out.println("한 달은 31일입니다."); 
	    		yield 31;
	    	}
	    	case 4,6,9,11 -> {
	    		System.out.println("한 달은 30일입니다."); 
	    		yield 30;
	    	}
	    	case 2 ->{
	    		System.out.println("한 달은 28일입니다.");
	    		yield 28;
	    	}
	    	default->{
	    		System.out.println("존재하지 않는 달 입니다."); 
	    		yield 0;
	    	}
		};
		System.out.println(month + "월은 " + day + "일입니다.");
	}
}

반복문

while문

조건식이 true일 동안 순서대로 계속 반복

ex) while(조건문){

         수행문 ...

    }

-조건문이 false가 되거나, while문 안에 break;를 만나면 while문 종료

-조건문에 true를 작성하면 무한반복 가능

package ch17;

public class WhileTest {

	public static void main(String[] args) {

		int num = 1;
		int sum  = 0;
		
		while( num <= 10) {
			
			sum += num;
			num++;
		}
		
		System.out.println(sum);
		System.out.println(num);
	}

}

do-while문

조건과 상관없이 수행을 한번 하고 while(조건식)을 체크

do {

    수행문 1;

} while(조건식);

    수행문 2;

 

아래는 입력받는 값을 더하여 sum에 저장하는 do-while문

0이 입력되면, (input != 0)이 false가 되기 때문에 do-while문 종료

package ch18;

import java.util.Scanner;

public class DowhileTest {

	public static void main(String[] args) {

		Scanner scanner = new Scanner(System.in);
		int input; 
		int sum = 0;

		do {
			input = scanner.nextInt();
			sum += input;
			
		}while(input != 0);

			
		System.out.println(sum);
	}

}

for 문

for(초기화식; 조건식; 증감식){

      수행문;

}

 

아래의 for문 예시에서,

초기화식은 int i =0;

조건식은 i<10;

증감식은 i++, count++

풀어서 설명하면, 

i는 0부터 10보다 작을때까지 수행문을 수행하고

수행이 끝나면 i를 1 증가시키고, count또한 1을 증가시켜라.

package ch19;

public class ForTest {

	public static void main(String[] args) {
	
		int count =1;
		int sum = 0;
		
		for( int i = 0 ; i<10; i++, count++) {  //10번
			sum += count;
			//count++;
		}
		System.out.println(sum);
		
		
		int num = 1;
		int total = 0;
		
		while( num <= 10) {
			total += num;
			num++;
		}
		System.out.println(total);
	}
}

-초기화식 생략 가능(이미 초기화 되어 있는 경우)

-조건식 생략가능(반복수행 조건이 내부에 있고, break도 활용가능)

-증감식 생략가능(연산이 복잡한 경우 등)

-무한반복 for( ; ; )

 

중첩 반복문

반복문 내부의 반복문

2차원배열 등을 다룰때 유용

 

아래는 구구단 구현 예제

package ch20;

public class NestedLoopTest {

	public static void main(String[] args) {
		int dan = 2;
		int count = 1;
		
		for( dan = 2; dan <= 9; dan++) {
			
			for(count = 1; count <=9; count++) {
				
				System.out.println( dan + "X" + count + "=" + dan * count);
			}
			System.out.println();
		}
		
		dan = 2;
		while( dan <= 9 ) {
			count = 1;
			while (count <= 9) {
				
				System.out.println( dan + "X" + count + "=" + dan * count);
				count++;
				
			}
			dan++;
			System.out.println();
		}
	}
}

break문

제어문의 블록을 빠져나옴 (for, while, switch)문에서 활용가능

package ch21;

public class BreakTest {

	public static void main(String[] args) {

		int sum = 0;
		int num;
		for( num = 1; ; num++) {
			
			sum += num;
			if( sum >= 100)	break;
		}
		
		System.out.println(sum);
		System.out.println(num);
	}
}

continue문

continue 이후의 수행문들을 수행하지 않음

package ch21;

public class ContinueTest {

	public static void main(String[] args) {
		int num;
		for( num = 1; num <= 100; num++) {
			
			if( (num % 3) != 0) continue; 
			
			System.out.println(num);
			
		}
	}
}
반응형