-데이터를 처리하여 결과를 산출하는 것
-연산자 : 연산에 사용되는 표시나 기호 (+,-,*,/,%......)
-피연산자 : 연산대상이 되는 데이터(리터럴,변수)
-표현식 : 연산자와 피연산자를 이용하여 연산의 과정을 기술한 것.
-- 연산자 기초예제---
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 감소)-----------
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
-필요한 피연산자수
-산출값 타입이 무엇인지
(세세한건 실습하다보면 익힐 수 있다.)
-증감/ 부호/비트 /논리/ 대입 연산자만 방향이 오른쪽에서 왼쪽 나머지는 반대
-단항수행 후 이항/다항 식 마지막에 대입연산자 //단 후위증감 제외
-----------------------------오버플로우에 대해---------------------------
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) 이라고 한다.----
제어문: 프로그램의 실행흐름을 제어
-제어문의 종류
-조건문
if문 , switch 문
-반복문
for문, while문, do-while문
-break 문, continue문
-제언문의 중첩 (중첩이 3개 이상 들어가면 뭔가 잘못되고 있는 경우다.)
제어문의 중괄호 내부에 다른 제어문 작성 가능
-정상적인 코드 실행 흐름
main()메소드의 시작인 중괄호 {에서 끝 중괄호} 까지 위 -> 아래 방향으로 실행
-다양한 제어문을 통하여 기존 흐름을 바꿀 수 있음.
-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
/ 한글 깨지고 하는거 인코딩// 디코딩 잡을 줄 알아야 함 (*솔직히 잘못알아들음 >> 구글링으로 보완)
다른 프로젝트를 읽고 싶으면 리소스> 패쓰 지정해주고 > 텍스트 파일 인코딩 ms
-예쁘게 정리해야하는데.. 네이버블로그보다 뭔가 없고 동시에 또 뭔가 있다... 하다보면 가독성 있게끔 늘겄지.. 세세한 내용은 코드로 적자 내가 이걸 오늘 배웠지라는 복습한다는 느낌으로 적어내려간다.
https://velog.io/@koo9b9h/6%EC%9D%BC%EC%B0%A8-%EB%B0%98%EB%B3%B5%EB%AC%B8%EA%B3%BC-%EC%B0%B8%EC%A1%B0%ED%83%80%EC%9E%85
내 글 중간쯤에 글자에 대한 정리가 있다