4일차 연산자와 제어문(일부)

쿠우·2022년 3월 28일
0

3장 연산이란

-데이터를 처리하여 결과를 산출하는 것
-연산자 : 연산에 사용되는 표시나 기호 (+,-,*,/,%......)
-피연산자 : 연산대상이 되는 데이터(리터럴,변수)
-표현식 : 연산자와 피연산자를 이용하여 연산의 과정을 기술한 것.

	-- 연산자 기초예제---
	public static void main(String[] args) {
		int x = -100 ;  //x 변수정의 ,부호연산자 x 순수한 값 리터럴.
		int result1 = +x; // 부호연산자(+) 적용
		int result2	= -x; // 부호연산자(-) 적용
		
		System.out.println("result1=" + result1 );// 문자열연결 연산자
		System.out.println("result1=" + result2); // 문자열연결 연산자
		
		short s = 100;  // 변수정의
		// short result3 = -s; < 컴파일 에러 : 연산이 되고나서 -s 가 int 타입으로 되었음. 
		int result3 = -s ; //  변수정의
		System.out.println("result3= " +  result3); //문자열 연결연산자
	} // main 

1.연산자의 구분

1-1단항연산자 - 피연산자 1개

-----------증감연산자 : ++(증가연산자: +1 증가), --(감소연산자: -1 감소)-----------
	public static void main(String[] args) {
		int x= 10; //변수정의
		int z; // 변수선언 
		
		System.out.println("------------------");
		// 단항에 적용 되면 전위 후위 차이가 없다. 
		x++;// 후위 증가연산자 적용(단항)
		++x;// 전위 증가연산자 적용(단항)
		
		
		System.out.println("x="+ x);

	
		z = x++ +1; // x의 증가식은 다른 연산이 끝나고 별도로 이뤄진다 . 
		//z=x+1 ; 13=12+1
		//x=x+1; 13=12+1
		z = ++x +1; // x의 증가식은 다른 연산이 시작하기 전에 제일 먼저 이뤄진다. 
		//x=x+1; 14=13+1
		//z=x+1; 15=14+1
	
		z = (x++) +1; //   << 괄호는 상관없이 후위 적용
		//z=x+1 ; 
		//x=x+1; 
	}
------------------------- 단항 논리부정연산자---------------------
	public static void main(String[] args) {
		// 플래그 변수 (불리언타입의 변수)의 토글(toggle)
		
		boolean play = true;  
		System.out.println(play);
		
		play = !play; 
		System.out.println(play);
		
		play = !play;
		
		System.out.println(play);
	}

1-2이항연산자 - 피연산자 2개

--------------------문자열 연산자 (+)에 대하여-------------------
	// 그 어떤 기본타입보다 , 문자열 타입 (String)이 더 크다.
	// 즉, 기본타입 < 문자열타입 (String)
	public static void main(String[] args) {
		String str1 = "JDK" + 6.0 ;  // 연산자마자, 피연산자의 타입은 맞추어 실행 
		String str2 = str1 + " 특징"; 
		
		System.out.println(str2);
		
		// 연산에 방향에 따라 계산이 달라짐.
		String str3 = "JDK" + 3+ 3.0; // JDK33.0
		String str4 = 3+ 3.0 + "JDK"; // 6.0JDK
		
		System.out.println(str3);
		System.out.println(str4);

	} //main
----- 가장 중요한 연산자: (1) 비교연산자(결과: boolean) (2) 논리연산자(AND/OR/NOT)(결과: boolean)----
    
	public static void main(String[] args) {
		
		int charCode = 'A';  // Promotion
		
		
		//비교연산자 (=,!= , > , < , >=, <=)
		System.out.println(charCode>=65); // ~이상  
		System.out.println(charCode<=90); // ~ 이하
		
		// 비교연산자와 논리연산자를 함께 사용
		// && : 이항연사자로, 2개의 피연산자가 모두 true일 때만, true가 된다.
		// || : 이항연산자로, 2개의 피연산자 중 하나만이라도 true이면 , true가 된다. 
		System.out.println((charCode<=97) && (charCode<=122) );
		
	} //main

1-3다항연산자 - 피연산자 여러개

	-삼항 (3개의 피연산자를 사용하는 연산자)  연산자 = 조건연산자! 
 	// 형식 : (조건식) ? 참일때의 값 : 거짓일때의 값 
	public static void main(String[] args) {
		int score = 85; 
		char grade = (score> 90) ? 'A':'B';
		System.out.println(score + "점은 " + grade + "등급 입니다");
	} // main

2.연산자의 종류를 볼 때 중요한건

-필요한 피연산자수
-산출값 타입이 무엇인지
(세세한건 실습하다보면 익힐 수 있다.)

3.연산자의 방향과 우선순위

-증감/ 부호/비트 /논리/ 대입 연산자만 방향이 오른쪽에서 왼쪽 나머지는 반대
-단항수행 후 이항/다항 식 마지막에 대입연산자 //단 후위증감 제외

----숫자 리터럴이 있을 때 꼭 기억하자! ----

-----------------------------오버플로우에 대해---------------------------
	public static void main(String[] args) {
		int x = 1000000;
		int y = 1000000; 
		int z = x*y;  //Overflow 발생: 보관 가능한 최대값을 뛰어넘었다. 
						// 최소값으로 이동해서 남은 값에 대해서 수행

		System.out.println(Integer.MAX_VALUE);
		System.out.println(Integer.MIN_VALUE);
//		long x = 1000000;
//		long y = 1000000;
//		long z = x*y;
		
		System.out.println(z);		
	} //main
----------------------------NaN 과 Infinity------------------------
	// 수학의 정의 : 수학에서는, 0으로 나누는 것을 허용하지 않는다. 
	// 아래의 예제와 같은 것들이 나오면 고치거나 어떻게 사용할지 한 번 고민해야하는 코드임
	public static void main(String[] args) {
		int x =5; 
		double y= 0.0;  //우리가 봤을때 0.0 이어도 컴퓨터에는  0.0....01 >0에 근사치 
		
		double z = x/y;  // 무한대 
		double zz= x%y; // NaN (Not a Number):숫자로 표현 불가능한 상태

        System.out.println(Double.isInfinite(z)); //무한대의 체크방법
    	System.out.println(Double.isNaN(zz));

		
		// 잘못된 코드
		System.out.println(zz+2);
	
		// 알맞은 코드 
		if (Double.isInfinite(z) || Double.isNaN(zz)) {
			System.out.println("값 산출 불가");
		} else {
			System.out.println(z+2);
		}
	} //main 

-정수 리터럴 ==> 무조건 가정 l/L이 없는 한 int 정수로
*문자열의 형병환에 대해서

	public static void main(String[] args) {
		char c1 = 'A' +1; //문자열 리터럴은 자동 형변환되지  않는다. 
		char c2 = 'A'; 
//		 char c3 = c2 + 1; //컴파일 에러 = 얘는 변수여서 형변환 된다. 
		
 		System.out.println("c1: " + c1);
		System.out.println("c2:" + c2);
		 //System.out.println("c3:" +c3); 
	} // main

-실수 리터럴 ==> 뒤에 f/F가 없는한, double 타입으로 가정

*실수의 연산과정에서 정확도

	public static void main(String[] args) {
		int apple =1; 
		double pieceUnit = 0.1 ; // 0.1 이란 실수는 ,표현식에 사용될 때 ,근사치를 발생  
		int number =7 ;
		 
		
		double result = apple - number* pieceUnit;
		
		System.out.println("사과 한개에서");
		System.out.println("0.7조각을 빼면");
		System.out.println(result + "조각이 남는다."); //0.299.....3 조각 유한표현
	}

*double과 float 실수의 정확도 차이

	public static void main(String[] args) {
		int v1 = 5;
		int v2 = 2;
		
		int result1 = v1 + v2; 
		System.out.println("result1=" + result1);
		
		int result2 = v1 - v2;
		System.out.println("result2=" + result2);
		
		int result3 = v1 * v2;
		System.out.println("result3=" + result3);
		
		int result4 = v1 / v2; // 나눗셈
		System.out.println("result4=" + result4);
		
		int result5 = v1 % v2; // 나머지  (나중에 알고리즘 짤 때 많이 사용)
		System.out.println("result5=" + result5);
		
		double result6 = (double) v1 / v2; // 나눗셈 int 타입이어서 캐스팅해줬음 
		// 강제 형변환 연산은 단항 연산 ((double)v1) /v2 가독성을 높여줘야함. 
		// 더블은 배정도 실수 (정확성 2배!) 플롯은 단정도 실수 (정확도가 1이라고 가정)
		System.out.println("result6=" + result6);	
	}

---main 메서드를 실행진입점 (Entry Point) 이라고 한다.----


4장 제어문

제어문: 프로그램의 실행흐름을 제어
-제어문의 종류
-조건문
if문 , switch 문

-반복문
for문, while문, do-while문

-break 문, continue문


-제언문의 중첩 (중첩이 3개 이상 들어가면 뭔가 잘못되고 있는 경우다.)
제어문의 중괄호 내부에 다른 제어문 작성 가능


1. 코드실행 흐름제어

-정상적인 코드 실행 흐름
main()메소드의 시작인 중괄호 {에서 끝 중괄호} 까지 위 -> 아래 방향으로 실행
-다양한 제어문을 통하여 기존 흐름을 바꿀 수 있음.

2. 조건문 (if문, switch문)

-if 문(후에 수정을 요구 할 수 있기때문에 중괄호 블록 생략하지마세요.)
조건식 결과 따라 중괄호 { } 블록을 실행할지 여부 결정할 때 사용
true 또는 false값을 산출할 수 있는 연산식
boolean 변수
조건식이 true이면 첫 블록 실행하고 false 이면 else블록을 실행하거나/아무 수행도 실행하지 않음

 -------------------------기본적인 조건문 ----------------------------
 	public static void main(String[] args) {
		int score = 93; 
		
		if (score>=90) {
			System.out.println("점수가 90점보다 큽니다.");
			System.out.println("등급은 A등급 입니다."); 
		} // else {
//		System.out.println("점수가 90보다 작습니다.");
//		System.out.println("등급은 B등급 입니다."); 
//		} << else문 
		
		// {} 생략시, 버그를 자신도 모르게 유발가능하다!! ->생략마라!
		if(score<90)
			System.out.println("점수가 90보다 작습니다.");
		System.out.println("등급은 B등급 입니다."); 
		
	} // main 
-------------------------조건문 - if else 문 ---------------------------
public static void main(String[] args) {
		int score = 93; 
		
		 // 범위를 구성할때 (조건식 || 조건식) 이런식 말고 아래와 같이 한다.
		if (score>=90) {
			System.out.println("점수가 90점보다 큽니다.");
			System.out.println("등급은 A등급 입니다."); 
		}  else if(score>=80) {
		System.out.println("점수가 80~89 입니다.");
		System.out.println("등급은 B등급 입니다."); 
		} else if(score>=70) {
			System.out.println("점수가 70~79 입니다.");
			System.out.println("등급은 C등급 입니다."); 
		} else {
			System.out.println("점수가 70보다 작습니다.");
			System.out.println("등급은 D등급 입니다."); 
		}  // if-else 

	} // main 
------------------------조건문 + Math.random 메서드---------------------------
public static void main(String[] args) {
	// 무작위 정수를 구해주는 코드 -> 목적: 주사위의 눈 (1~6)을 무작위로 추출 
	// 0.0 <=Math.random() <1.0 => 0.0  <= x <1.0 (Half-open)
	int num = (int)(Math.random()*6)+1;  //+1 부터 시작해서 *6의 숫자를 추출하라 
	     // *6 length(범위)를 나타낸다. +1은 offset(시작점)을 나타낸다. 
		 // 무작위로 추출된 눈의 값을 판정 
		if (num==1) {
			System.out.println("1번입니다.");
		}  else if(num==2) {
			System.out.println("2번입니다.");
		} else if(num==3) {
			System.out.println("3번입니다.");
		} else if(num==4) {
			System.out.println("4번입니다.");
		} else if(num==5) {
			System.out.println("5번입니다."); 
		} else if(num==6) {
			System.out.println("6번입니다.");
		}  // if - else if -else 
	} // main 

3. 반복문 (for문, while문, do-while문)


/ 한글 깨지고 하는거 인코딩// 디코딩 잡을 줄 알아야 함 (*솔직히 잘못알아들음 >> 구글링으로 보완)
다른 프로젝트를 읽고 싶으면 리소스> 패쓰 지정해주고 > 텍스트 파일 인코딩 ms

-예쁘게 정리해야하는데.. 네이버블로그보다 뭔가 없고 동시에 또 뭔가 있다... 하다보면 가독성 있게끔 늘겄지.. 세세한 내용은 코드로 적자 내가 이걸 오늘 배웠지라는 복습한다는 느낌으로 적어내려간다.

profile
일단 흐자

1개의 댓글

comment-user-thumbnail
2022년 4월 7일
답글 달기