이미 학습해서 알고 있는 내용들이 있어서 모든 내용을 기록하지는 않을 것이다.
저작권의 이슈도 있으니 학습한 모든 내용을 기록할 수도 없다.
그러니 가능하면 내가 직접 내 손으로 입력한 것들만을 활용해서 기록으로 남길 것이다.
<학습 내용 키워드로 정리>
Java 기초 학습 / Variable 변수 / String 기본 자료형처럼 쓰일 수 있는 참조형 자료형 - 클래스라는 것 / Casting 자료형변환 / print, println, printf / Scanner 의 활용 / 여러 가지 연산자 활용
연산자 활용을 하면서 Scanner 활용 등을 했던 학습한 내용들이 종합적으로 녹아들어있는 코드를 공유하겠다.
코드 내에 주석으로 필기를 했으니 필요한 사람들은 공부가 될 수 있겠다.
package com.operator.controller;
import java.util.Scanner;
public class OperatorController {
public void checkLogic() {
String city = "서울";
int age = 30;
System.out.println((city.equals("서울")||city.equals("인천")) && age==30);
}
public void calcPoint() {
double scores = 0;
Scanner sc = new Scanner(System.in);
System.out.print("수학 점수 입력하세요 : ");
scores += sc.nextDouble();
System.out.print("영어 점수 입력하세요 : ");
scores += sc.nextDouble();
System.out.print("국어 점수 입력하세요 : ");
scores += sc.nextDouble();
System.out.print("코딩 점수 입력하세요 : ");
scores += sc.nextDouble();
System.out.println("합계 : " + scores + "\n평균 : " + scores/4);
}
public void inputMsg() {
String msg = "";
Scanner sc = new Scanner(System.in);
System.out.print("1번째 메세지를 입력하세요 : ");
msg += sc.nextLine();
msg += "\n";
System.out.print("2번째 메세지를 입력하세요 : ");
msg += sc.nextLine();
msg += "\n";
System.out.print("3번째 메세지를 입력하세요 : ");
msg += sc.nextLine();
msg += "\n";
System.out.print("4번째 메세지를 입력하세요 : ");
msg += sc.nextLine();
System.out.println(msg);
}
public void loginCheck() {
String id, password;
Scanner sc = new Scanner(System.in);
System.out.print("아이디를 입력하세요 : ");
id = sc.next();
System.out.print("비밀번호를 입력하세요 : ");
password = sc.next();
System.out.println(id.equals("user01")&&password.equals("1234")?"로그인 성공":"로그인 실패");
}
// 기능 제공용 클래스 --> 메소드 선언
public void singleOp() {
// 단항 연산자 활용하기
// 1. 부정연산 --> boolean 값을 반전시키는 연산자
// !변수명(boolean), 또는 !메소드호출(이것도 결과값은 boolean), 또는 !비교연산자(왜냐면 비교 연산자의 결과값은 boolean)
// syso 치고나서 ctrl + space + enter 하면 자동완성
System.out.println("=== 부정연산자 ===");
boolean flag = true;
System.out.println("flag : " + flag);
System.out.println("!flag : " + !flag);
String name = "차은우";
System.out.println(!name.contains("은"));
System.out.println(!(10>0));
// 2. 증가, 감소 연산자
// 변수에 저장된 값을 1 증가시키고 다시 변수에 저장하는 연산자
// ++변수, --변수 --> 전위연산 :
// 변수++, 변수-- --> 후위연산 :
int number = 10;
number++; // number = number + 1;
number++;
System.out.println(number);
number--;
System.out.println(number);
// 숫자셀 때 --> 특정 기능이 수행되는 횟수를 기록
// 반복문을 실행할 때 사용
// 전위연산 vs. 후위연산
// 단독으로 사용했을때는 차이가 없음
// 다른 연산자와 같이 사용했을때 전위연산과 후위연산의 차이가 발생
number = 0;
++number;
++number;
System.out.println(number);
int result = number++; // 여기에는 = 연산자랑 후위 ++ 연산자가 쓰였다. 순서가, = 가 우선이다.
// 후위 연산의 경우에는 다른 모든 연산을 다 처리하고 나서 실행되는 것이다.
// 그래서 후위.
System.out.println(result);
result = ++number; // 전위 ++ 연산자는 = 대입 연산을 하기 전에 증가부터 시켜버린다. 그리고 나서 대입을 한다.
System.out.println(result);
result = number++ + 20;
// ++ 가 지금 후위 연산이라서, 20을 더해주고 그 다음에 대입을 하고 난뒤에 증가 연산이 실행된다.
result = ++number + 20;
// 지금은 전위라서, 먼저 증가 시켜주고 난 뒤에 다른 연산들을 해준다.
}
public void calcOp() {
// 산술연산자
// +, -, *, /, %(나머지)
int su1 = 2;
int su2 = 10;
int result = su1 + su2;
System.out.println("su1 + su2 : "+result);
result = su1 - su2;
System.out.println("su1 - su2 : "+result);
result = su1 * su2;
System.out.println("su1 * su2 : "+result);
result = su1 / su2; // 둘다 int 라서, int 형으로 결과가 나온다. 그래서 double 로 바꿔줄 필요가 있다.
double result1 = (double) su1/su2;
System.out.println("su1 / su2 : "+result);
System.out.println("su1 / su2 : "+result1);
// 배수, 약수 -> 나머지 이용
// 어떤 수 x 를 4로 나누면 --> 나머지는 0, 1, 2, 3 만 나올 수 있다.
System.out.println(su1%4);
System.out.println(su2%5);
}
public void calculator() {
Scanner sc = new Scanner(System.in);
System.out.print("첫번째 숫자를 입력하세요 : ");
int su1 = sc.nextInt();
System.out.print("두번째 숫자를 입력하세요 : ");
int su2 = sc.nextInt();
System.out.println("더하기 : " + (su1+su2)); // 괄호를 해주지 않으면 연산의 순서가 달라짐.
System.out.println("빼기기 : " + (su1-su2)); // 마찬가지로 괄호를 해주지 않으면 연산의 순서가 달라짐.
System.out.println("곱하기 : " + (su1*su2)); // 여기서는 괄호를 해주지 않았어도, * 가 + 보다 먼저라서 괜찮음.
System.out.printf("나누기 : %.2f", (double)su1/su2);
}
public void compareOp() {
// 비교연산자
// 동등비교 : == (일치), != (불일치)
// 대소비교(숫자) : <, >, <= , >=
// 비교연산의 결과는 boolean 형으로 반환 --> true, false
// 조건문을 만들때 사용!
// 1. 동등비교 : 숫자, 문자(char)
int num = 13;
int num1 = 19;
int num2 = 13;
System.out.println(num==num1);
System.out.println(num==num2);
double height = 180.5;
double height1 = 181.5;
double height2 = 180.5;
System.out.println(height==height1);
System.out.println(height==height2);
char ch='A';
char ch1='a';
char ch2='A';
System.out.println(ch==ch1);
System.out.println(ch==ch2);
System.out.println(ch=='a');
System.out.println(ch==65);
// * 문자열에 대해서 동등비교해보자
System.out.println("==== 문자열 동등비교 ====");
String name = "차은우";
String name2 = new String("차은우");
System.out.println(name == "차은우"); // 이렇게 리터럴값 "차은우"를 썼을 때, 여기서는 true
System.out.println(name2 == "차은우"); // 하지만 여기서는 false
System.out.println(name==name2);
// 왜냐하면 String 문자열의 경우에는 문자열의 경우에는 == 이 연산자를 가지고는 비교를 할 수가 없다.
// String 은 클래스이다. 그래서 객체 정보가 Heap 에 저장이 되어 있다. 그런데 저장이 주소값을 가지고 저장을 한다.
// 그래서 String 으로 생성된 객체는 절대 동일한 주소값을 가질 수가 없다.
// == 연산자 가지고는 주소값을 비교한다.
// 그래서 문자열을 비교할 때에는 equals() 를 이용한다!
System.out.println(name.equals("차은우"));
System.out.println(name2.equals("차은우"));
System.out.println(name.equals(name2));
System.out.println(name2.equals(name));
// !=
System.out.println("num!=num1 : " + (num!=num1));
// 문자열의 경우에는, !(문자열.equals(문자열))
System.out.println("!name.equals(\"차차차\")" + (!name.equals("차차차")));
// 대소비교하기
System.out.println("num<num1 : " + (num<num1));
// char 형에서 대소비교가 가능할까? - 코드값을 가지고 있기 때문에 비교 가능
System.out.println("ch < ch1 : "+ (ch<ch1));
System.out.println('A' > 'Z');
// 문자열 대소비교 가능할까? 애초에 문자열에다가는 연산자 사용 자체가 안 되도록 해놓았다!
// System.out.println(name>name1); // 그러면, 오름차순 내림차순 처럼 순서를 어떻게 정할 수 있는가?
// 그래서 문자열의 경우에는 compare 라는게 있어서 그건 나중에.
}
public void logicOp() {
// 논리 연산자
// boolean 값을 연결해주는 연산자
// 그리고, 또는
// 그리고 AND : &&
// 두 개의 피연산자가 모두 true 일때 true를 반환
// && 양옆에는 boolean 이 모두 true 일때에만 true.
// 그래서 이거를 All, 전체라고 생각하면 편하다. 1개라도 true 가 아니면 안 된다.
// 또는 OR : || (이거는 shift 를 누른 상태에서 백스페이스)
// 두 개 이상의 피연산자 중 한 개라도 true 면 true를 반환
// 그래서 이거는 Any, 어떤거라도~ 생각하면 편하다. 아무거나, 어떤거라도 1개만 true 라면 true 인 것이다.
// id 가 admin 이고 password 가 1234를 확인하기
String id = "admin";
String password="1111";
System.out.println(id.equals("admin") && password.equals("1234"));
// 성별이 여자 또는 남자인 경우 true, 아니면 false
char gender = '여';
System.out.println(gender=='여' || gender=='남');
// 성별이 여자이거나 성인인 경우 true
boolean adult = true;
System.out.println(gender=='여' || adult==true);
// 숫자의 범위를 확인할 때
// 입력값이 1~10 인지 확인.
int su = 5;
System.out.println(1<=su && su <= 10);
// 나이를 입력받고 청소년이면 true, 아니면 false
// 문자 한 개를 입력받고 그 문자가 대문자인지 확인하는 기능
// 대문자면 true
Scanner sc = new Scanner(System.in);
System.out.print("나이를 입력하세요 : ");
int childAge = sc.nextInt();
System.out.println(13<=childAge && childAge<=19);
System.out.print("영어 문자 1개만 입력하세요(대소비교) : ");
char input = sc.next().charAt(0);
System.out.println(65<=input && input<=92); // 'A', 'Z' 라고 써도 된다!
//논리 연산자 여러개 사용하기
//남자 또는 여자이고, 나이가 20살인 사람이니?
System.out.println("성별은? (남/여)");
gender = sc.next().charAt(0);
System.out.println(gender=='남' || gender=='여' && childAge==20 );
// 연산자 우선 순위가 && and 라서, 먼저 && 를 판단하고 그리고 || 판단함
// 그래서 || 랑 && 가 섞여 있으면 순서를 위해서 ( ) 괄호를 활용해야 함
System.out.println( ( gender=='남' || gender=='여' ) && childAge==20 );
}
public void complexOp() {
// 복합 대입 연산자
// 계산한 결과를 대입까지 해주는 것!
// +=, -=, /=, *=
// 값을 누적하거나 차감하는 것. 포인트와 관련이 된 것.
int total = 3000;
total += 100;
System.out.println(total);
total -= 1800;
System.out.println(total);
// 문자열에 적용하기
String msg = "";
msg += "오늘은 수용일입니다. ";
msg += "2일만 나오면 쉬어요~";
System.out.println(msg);
String html = "";
html += "<html>";
html += "<head>";
html += "<title>나의 첫 페이지</title>";
html += "</head>";
html += "<body>";
html += "<h1>나의 페이지입니다." + msg + "</h1>";
html += "</body>";
html += "</html>";
System.out.println(html);
}
public void thirdOp() {
// 삼항 연산자
// 조건식 (true, false 가지는 것) ? true 일때 실행할 내용 : false 일때 실행할 내용
// 양자택일이다.
// 그런데 삼항 연산자 안에 삼항 연산자 쓰는것도 가능.
// 키가 180보다 크면 "키가 크네요" 를 출력하고, 작으면 "키가 작네요"
double height = 180.5;
System.out.print("당신의 키를 입력하세오 : ");
Scanner sc = new Scanner(System.in);
height = sc.nextDouble();
String msg = height>180?"키가 크네요":"키가 작네요";
System.out.println(msg);
// 점수를 입력받아 60점 이상이면 합격! 아니면 불합격을 출력
System.out.print("당신의 점수를 입력하세요 : ");
double score = sc.nextDouble();
System.out.println(score>=60?"합격!":"불합격");
}
public void bitOp() {
// bit 연산자 활용
// 저장소에 있는 bit 끼리 연산처리 하는 것
// ~A : 모든 비트값을 반전시키는 것, 0은 1이 되고, 1은 0이 되는 것
// a&b (AND) : 둘 다 1 일때에만 1, 아니면 0
// a|b (OR): 둘중에 1개만 1이여도 1, 아니면 0
// a^b (XOR): 둘중에 1개만 1이여만 1, 아니면 0 (둘다 1이면 0이 된다.)
// a<<1 : 왼쪽으로 1칸씩 bit의 값을 옮기는 것. 그래서 생긴 맨 오른쪽은 0으로 채움. 이거 원래 a에 2를 곱한 것과 같다.
// a>>1 : 오른쪽으로 1칸씩 bit의 값을 옮기는 것. 이거는 2로 나누는 것과 같다.
// <<, >> 이거는 shift 연산이라고 부름.
int a=10, b=22;
String bit = "";
for(int i = 0; i<32 ; i++) {
bit+="0";
}
String bitData = bit+Integer.toBinaryString(a);
bitData = bitData.substring(bitData.length()-32);
System.out.println(bitData + " -> a 비트값 " + a);
bitData = bit+Integer.toBinaryString(b);
bitData = bitData.substring(bitData.length()-32);
System.out.println(bitData + " -> b 비트값 " + b);
bitData = bit+Integer.toBinaryString(a&b);
bitData = bitData.substring(bitData.length()-32);
System.out.println(bitData + " -> a&b 비트값 " + (a&b));
bitData = bit+Integer.toBinaryString(a|b);
bitData = bitData.substring(bitData.length()-32);
System.out.println(bitData + " -> a|b 비트값 " + (a|b));
bitData = bit+Integer.toBinaryString(a^b);
bitData = bitData.substring(bitData.length()-32);
System.out.println(bitData + " -> a^b 비트값 " + (a^b));
bitData = bit+Integer.toBinaryString(~a);
bitData = bitData.substring(bitData.length()-32);
System.out.println(bitData + " -> ~a 비트값 " + (~a));
bitData = bit+Integer.toBinaryString(a>>1);
bitData = bitData.substring(bitData.length()-32);
System.out.println(bitData + " -> a>>1 비트값 " + (a>>1));
bitData = bit+Integer.toBinaryString(a<<1);
bitData = bitData.substring(bitData.length()-32);
System.out.println(bitData + " -> a<<1 비트값 " + (a<<1));
}
}
'에듀테크 부트캠프' 카테고리의 다른 글
switch는 조건문인데 반복문이기도 한건가? (0) | 2025.03.10 |
---|---|
자바 반복문과 제어문 완벽 정리: for, while, switch, break, continue 그리고 랜덤값 활용 (0) | 2025.03.10 |
배열의 인덱스는 왜 0부터 시작할까? + 참조값의 비밀 (0) | 2025.03.10 |
0은 양수일까? 컴퓨터가 0을 처리하는 방식과 에듀테크에서의 의미 (1) | 2025.03.08 |
Java 제어문 완전 정복! 조건문과 반복문을 활용한 실전 예제 (0) | 2025.03.07 |