개발자
[JAVA 4일차]연산자(산술,증감,논리,비교,할당,삼항)/연산메소드/Scanner/try catch(예외)/Integer(변환)/NumberFormatExceptio 본문
개발자/JAVA
[JAVA 4일차]연산자(산술,증감,논리,비교,할당,삼항)/연산메소드/Scanner/try catch(예외)/Integer(변환)/NumberFormatExceptio
GoGo개발 2022. 8. 15. 15:58산술연산자
종류 : + = * / %(나머지구함) << >> >>>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
x << n 은 x*(2의 n승)의 결과값과 같다. x는 실수형은 불가하고 정수형만 가능함.
x >> n 은 x가 양수일 경우 x/(2의 n승)의 결과값과 같다. x는 실수형은 불가하고 정수형만 가능함.
x >>> n 은 정수 x를 32bit 형태의 2진수로 나타낸후 오른쪽으로 n번 이동시키고 빈자리는 0으로 채운다.
System.out.println("==== 1. 산술연산자 + - * / %(나머지) << >> >>> ====");
int n = 10;
System.out.println("n+3 =" + (n+3)); // n+3 =13
System.out.println("n-3 =" + (n-3)); // n-3 =7
System.out.println("n*3 =" + (n*3)); // n*3 = 30
System.out.println("n/3 =" + (n/3)); // n/3 =3 정수/정수=정수(몫)
System.out.println("n/3 =" + (n%3)); // n%3 = 1 10을 3으로 나누었을때의 나머지
System.out.println("n<<3 = " + (n<<3)); // n<< = 80
|
cs |
증감 연산자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
//int a=7;
//int b=3;
// 또는
int a=7, b=3;
System.out.println("a =>" + a); // a=> 7
//a = a+1;
//또는
a++;
System.out.println("a =>" + a); // a=> 8
++a;
System.out.println("a => " + a); // a=> 9
System.out.println("b =>" + b); // b=> 3
//b = b-1;
//또는
b--;
System.out.println("b =>" + b ); // b=> 2
--b;
System.out.println("b =>" + b ); // b=> 1
|
cs |
1. 후위 증감연산자 : (a++; b--;)는 다른 연산을 다 마친 이후에 1씩 증감한다.
1
2
3
4
5
6
|
int z=++x; // ++x; x=x+1; x=11; z=x; z=11;
System.out.println("z => " + z); // z => 11
System.out.println("x => " + x); // x => 11
|
cs |
2.전위 증감연산자 :(++a; --b;) 맨먼저 1씩 증감을 마친 이후에 다른 연산을 한다.
논리 부정 연산자(boolean)
1
2
3
4
5
6
|
System.out.println("\n==== 4. 논리 부정 연산자 ! ====");
boolean bool = false;
System.out.println("bool : " + bool); // bool : false
System.out.println("!bool : " + !bool); // !bool : true
|
cs |
논리 연산자
종류 : & | && || (두개짜리가 자주쓰인다)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
System.out.println("\n==== 6. 논리 연산자 & | && || ====");
수학에서는 T ∧ T ∧ F ==> F ^=and ∨=or(||)
수학에서는 T ∧ T ∧ T ==> T
수학에서는 F ∧ T ∧ T ==> F
수학에서는 T ∨ T ∨ F ==> T
수학에서는 T ∨ T ∨ T ==> T
수학에서는 F ∨ F ∨ F ==> F
수학에서는 F ∨ F ∨ T ==> T
int c=50, d=60, e=70;
bool = ( c > d ) && (d < e) && (c == 3);
// false && 스킵 <<암기>> 어차피 false니까 뒤에는 연산 안한다.
System.out.println("bool => " + bool); // bool => false
bool = ( c > d ) || (d < e) || (c == 3);
// false || true || skip 어차피 참이니까 뒤에 연산 안한다.
System.out.println("bool => " + bool); // bool => true
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bool = ( c > d ) & (d < e) & (c == 3);
// false & true & false 한개짜리는 연산 스킵못한다
System.out.println("bool => " + bool); // bool => false
bool = ( c > d ) | (d < e) | (c == 3);
// false | true | false
System.out.println("bool => " + bool); // bool => true
|
cs |
<예시들>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
System.out.println("\n~~~~~~~~ 퀴즈1 ~~~~~~~\n");
int i=1;
int j=i++; // j=i; j=1; i++; i=2;
if( (i > ++j) & (i++ == j) ) {
//++j; j=2; i>j 2>2
// false & 끝까지연산 i==j 2==2 true i++ i=3
i= i+j; //false 니까 i= i+j 연산 안한다
}
System.out.println("i=" +i); // i=3
i=1;
j=i++; // j=i; j=1; i=2;
if( (i > ++j) && (i++ == j) ) {
// ++j; j=2; i>j 2>2
// false && 이미 false 나와서 스킵한다
i= i+j; // false니까 연산 안함
}
System.out.println("i=" +i); // i=2
System.out.println("\n~~~~~~~~ 퀴즈2 ~~~~~~~\n");
int m1=0;
int n1 = 1;
if((m1++ == 0) | (n1++ == 2)) {
// m1 == 0 true m1++; m1=1; | n1==2; 1==2; false n1++; n1=2;
m1 = 42; //m1=42;
}
System.out.println("m1 => "+m1+ ", n1 =>" +n1);
// m1 => 42 , n1 => 2
m1=0;
n1=1;
if( (m1++ == 0) || (n1++ == 2)) {
// m1 == 0 0 == 0 true m1++; m1=1; || 이미 true 이기때문에 더이상 연산 안한다
m1=42; // m1=42
}
System.out.println("m1 => "+m1+ ", n1 =>" +n1);
// m1 => 42 , n1 => 1
//###### 7. 비교 연산자 #######
// == 같다, !== 같지않다, > < >= <=
|
cs |
비교연산자
종류 : == 같다, !== 같지않다, > , < , >= , <=
할당연산자(연산후 대입 연산자)
종류 : += -= *= /= %
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
System.out.println("\n==== 8. 할당 연산자(연산후 대입 연산자) += -= *= /= %= ====");
int no = 1;
no += 3; // no = no +3; 와 같은 것이다.
System.out.println("no="+no); //no=4;
no -= 2; // no = no -2; 와 같은 것이다.
System.out.println("no="+no); //no=2;
no *= 5; // no = no *5; 와 같은 것이다.
System.out.println("no="+no); //no=10;
no /= 4; // no = no /4 ; 와 같은 것이다.
System.out.println("no="+no); //no=2;
no %= 3; // no = no %3 ; 와 같은 것이다.
System.out.println("no="+no); //no=2;
|
cs |
삼항 연산자
변수선언 = (조건식)?값1:값2;
변수를 선언하고 나서 값을 부여하고자 할 때 사용되어지는데
조건식이 참 이라면 변수에 값1 을 대입해주고,
만약에 조건식이 거짓 이라면 변수에 값2를 대입해준다.
1
2
3
4
5
6
|
System.out.println("\n==== 9. 삼항연산자 ====");
int num1=50, num2=60;
int num3=(num1 > num2)?num1:num2; //참이면 num1 거짓이면 num2
System.out.println("num3 => " + num3);
//num3 = 60
|
cs |
연산 메소드
1
2
3
4
5
|
// 2개의 정수를 입력받아 더하기를 해주는 메소드
int plus(int num1, int num2) {
return num1+num2;
}
|
cs |
minus, multiply(곱하기), divide(나누기) 도 가능하다.
scanner(스캐너)
import 필요하다
1
2
3
4
5
6
|
Scanner sc = new Scanner(System.in);
System.out.print("문장을 입력하세요 => " );
String inputStr = sc.nextLine();
|
cs |
System.in은 입력장치(키보드)를 말한다.
System.out은 출력장치(모니터)를 말한다.
Scanner sc 는 키보드에서 입력된 문자열을 읽어들이는 객체이다.
sc.nextLine();은 키보드로 부터 입력받은 문장을 읽어들이는 것인데 엔터(종결신호)까지 모두 읽어들인 후 스캐너 버퍼에 아무것도 남기지 않는다.
1.정수를 입력받는 경우
1
2
3
4
5
|
int inputNum_1 = sc.nextInt(); // 10 10공백 10엔터 sc.nextLine();
// 10 30엔터
//byte jumsu = sc.nextByte(); 바이트로 할거면 이렇게
|
cs |
sc.nextInt(); 는 정수(int)를 읽어들이는 것인데 종결자가 공백 또는 엔터이다.
종결자(공백 또는 엔터) 앞까지 입력해준 정수를 읽어온다.
sc.nextInt(); 을 사용하면 스캐너(sc)버퍼에는 종결자(공백 또는 엔터)가 삭제되는 것이 아니라 그대로 남아 있게 된다.
sc.nextLine(); : 스캐너(sc)버퍼에 남아있는 것을 비우는 (제거하는) 효과를 가진다.
2.sc.next();
1
|
String inputWord_1 = sc.next(); // 안녕 하세요 호호호엔터
|
cs |
>> 안녕 만 출력 된다.
sc.next(); 는 단어를 읽어들이는 것인데 종결자가 공백 또는 엔터이다.
종결자(공백 또는 엔터) 앞까지의 입력해준 문자열을 읽어온다.
sc.next(); 을 사용하면 스캐너(sc)버퍼에는 종결자(공백 또는 엔터)가 삭제되는 것이 아니라 그대로 남아 있게 된다.
try catch (예외처리)
1.첫번째 방법
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
Scanner sc =new Scanner(System.in);
System.out.println("정수를 입력하세요 => ");
try {
int inputNum = sc.nextInt(); // 123
sc.nextLine(); // 안녕하세요
System.out.println("입력한 정수 : " + inputNum);
}catch(InputMismatchException e) { // 정수로 입력해야 하는데 문자를 입력한 경우 예외 발생
//catch(java.util.InputMismatchException e) java.util 빼면 inputM~에 import해 해주어야한다.
// 여기가 예외처리를 해주는 곳이다. catch 는 오류를 잡음. 원래 자바는 오류를 던져버림.
//inputMis~는 클래스 e는 객체)
System.out.println("\n >>>정수만 입력하세요!! <<\n");
e.printStackTrace();
} // end of catch
sc.close();
|
cs |
try 문을 처리하면서 Exception 예외가 발생할 시 catch로 빠져서 그안의 실행문을 실행한다.
sc.close();는 scaaner를 닫아주는 것이다.
InputMismatchException : 정수로 입력해야 하는데 문자로 입력했을 때 예외발생
2.두번째 방법
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
Scanner sc = new Scanner(System.in);
String inputStr = "";
try {
System.out.print("1. 첫번째 정수 입력 :");
inputStr = sc.nextLine();
int num1 = Integer.parseInt(inputStr); // 문자열 "10" 을 int 타입인 10으로 변경하기 (숫자형 문자열을 숫자로 변환)
// 문자열 "안녕"을 Int타입으로 변경하고자할때
// Interger.parseInt는 String타입의 숫자를 int타입으로 변환해준다.
// 스테틱변수 인스턴스 필요없다.
// "10"
System.out.print("2. 두번째 정수 입력 :");
inputStr = sc.nextLine(); // "20"
//"하세요"
int num2 = Integer.parseInt(inputStr); // 문자열 "20"을 int 타입으로 바꿔준다
// 문자열" 하세요"를 int타입으로 변경하고자 할때
// 20
System.out.println(num1 + "+" + num2 + "=" + (num1+num2));
//10+20 = 30
} catch(NumberFormatException e) {
System.out.println(">> "+inputStr +"(은)는 정수가 아니므로 정수만 입력하세요!!");
e.printStackTrace(); // e.printStackTrace() : 에러 메세지의 발생 근원지를 찾아 단계별로 에러 출력
//inputStr 지역변수라 try 벗어나면 못쓴다. 그니까 try밖에 다시 만들어준다.
}
sc.close();
|
cs |
Interger.parseInt(객체); : 문자열을 int 타입으로 바꿔준다.
NumberFormatException : 문자를 숫자로 변경시도하다가 에러가 발생하는 경우
<지금까지 배운것 활용한 예제>
위의 cal 메소드를 사용했다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
try {
System.out.print("1. 첫번째 정수를 입력하세요 : ");
inputStr = sc.nextLine();
int num1 = Integer.parseInt(inputStr);
//String inputStr = sc.nextLine();
System.out.print("2. 두번째 정수를 입력하세요 : ");
inputStr = sc.nextLine();
int num2 = Integer.parseInt(inputStr);
Calculator calc = new Calculator(); // 동일 패키지라 임포트 X
//스테틱 메소드 쓰려면 메소드 설계한 곳에서 static int plus ~ 해주고 인스턴스 선언 없애주고 (new 선언 없애주기)
//System.out.println(num1 + "+" +num2 + "=" + calculator.plus(num1, num2)); 해준다.
System.out.println(num1 + "+" +num2 + "=" + calc.plus(num1, num2));
// calc.plus(num1, num2); // 10+ 4 = 14
System.out.println(num1 + "+" +num2 + "=" + calc.minus(num1, num2));
// 10-4=6
System.out.println(num1 + "*" +num2 + "=" + calc.multiply(num1, num2));
// 10*4=40
if(num2 != 0) //0이 아니라면 //
{
System.out.println(num1 + "/" +num2 + "=" + calc.divide(num1, num2));
// 10/4=2.5
}
else { //0이라면
System.out.println(">>> 나누기 할때는 분모에 0 이 들어로 수 없습니다. <<<");
}
} catch(NumberFormatException e) {
System.out.println(">>> " + inputStr + "안녕 은(는) 정수가 아니므로 정수만 입력하세요!! <<<");
}
sc.close();
|
cs |
Calculator calc = new Calculator();
스테틱 메소드 쓰려면 메소드 설계한 곳에서 static int plus ~ 해주고 인스턴스 선언 없애주고 (new 선언 없애주기)
정수,문자열 변환하기 Interger(Int,String)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
1. 문자열을 정수로 변환하기
String str = "10";
System.out.println(str+20); // 1020
System.out.println(Integer.parseInt(str) + 20); // 30
2. 정수를 문자열로 변환하기 -첫번째 방법
int no = 40;
System.out.println(no+50); //90
System.out.println(Integer.toString(no)+50); //"40"+50 ==> "4050"
2. 정수를 문자열로 변환하기 - 두번째 방법 더많이쓴다
int num = 50;
System.out.println(num+40); //90
System.out.println(String.valueOf(num)+40); // "50" +40 ==> "5040"
|
cs |
'개발자 > JAVA' 카테고리의 다른 글
[JAVA 6일차]wrapper/tpUppercase/chatAt/Math(반올림등)/equals/switch (0) | 2022.08.15 |
---|---|
[java 5일차]파라미터 좀 더 이해해보기 (0) | 2022.08.15 |
[JAVA 3일차]파라미터,생성자/필드값변경/Casting (0) | 2022.08.15 |
[JAVA 2일차]메소드,지역변수/현재시각 메소드/자료형,초기화,변수 선언,형변환/import(아직) (0) | 2022.06.24 |
[JAVA 1 일차] JAVA 설치/JRE와JDK(설치 및 환경 변수 설정)/클래스,변수,객체,필드,메소드 (0) | 2022.06.14 |