package dec05;
//2023-12-05
//어제했던 거, 연산자
public class HelloWorld {//클래스
public static void main(String[] args) {//main메소드
System.out.println();//System은 자바를 뜻함, out은 내보낸다.
}
}
package dec05;
/* 나는 과수원을 한다.
* 키우는 과일은 사과, 배, 오렌지
* 각각 하루 생산량 5, 7, 5개
* 위 값을 기준으로 하루 총 생산되는 과일 수 출력
* 출력시키고 하루 기준으로 시간당 몇 개의 과일이 열리는지 출력
* 예) 총 생산 갯수 : 17
* 시간당 생산 갯수 : 0.0101251...
*
* 주의 : 최대한 변수를 많이 사용하고, 반드시 한 번의 리터럴 값을 적기
* 캐스팅 많이 활용.
* 평균 변수는 float 타입으로 선언해서 사용.
*
*/
public class Test01 {
public static void main(String[] args) {
int apple, pear, orange, total;
float avg;
apple = 5;
pear = 7;
orange = 5;
total = apple + pear + orange;
final int HOURS_IN_DAY = 24;
avg = (float) total / HOURS_IN_DAY;
System.out.printf("총 생산 갯수 : %d%n", total);
System.out.printf("시간당 생산 갯수 : %f", avg); //왜 한 자리 안 나올까
System.out.println();
System.out.println("총 생산 갯수 : " + total);
System.out.println("시간당 생산 갯수 : " + avg);
// 캐스팅은 최소한만 하는 방향으로!
int fruits = 5 + 7 + 5;
float avgFruits = (float) fruits / 24; // 연산 시 큰 타입을 따라가서
// float avgFruits = fruits / 24F; //이것도 된다!
System.out.println(fruits);
System.out.println(avgFruits);
}
}
이클립스 줄삭제
ctrl
+d
https://velog.io/@syleemk/CS-%EB%B6%80%EB%8F%99-%EC%86%8C%EC%88%98%EC%A0%90-%EC%98%A4%EC%B0%A8
https://jaysecurity.tistory.com/124
^
는 배타적 OR
제곱은 Math.pow()
연산자 우선순위
https://toma0912.tistory.com/66
package dec05;
//연산자 = 계산할 때 사용하는 기호, 순서
/* 모든 프로그래밍에서는 데이터와 연산을 하기 위해 연산자를 사용함.
* 지금 배울 연산자는 자바 외 모든 언어에서 비슷하게 활용.
* 잘 알아두면 편함.
*
* 주의해서 봐야할 것은 연산자의 기능과 순서.
* 연산자의 종류가 많기 때문에 모두 외우려고 하기 보다는
* 자주 사용하면서 익숙해지면 좋다.
*
* 또한 아래 나열되는 연산자의 종류는 그 순서대로 정의한 것이라
* 그대로 외우면 좋다.
*
* 1. 최우선 연산자
* . 닷, 점 = 클래스 또는 객체 소유의 변수, 메소드 호출 연산자 (System.out.println 의 .)
* [] 배열
* () 괄호
*
* 2. 단항 연산자 - 한쪽 항에만 붙어 있는 거.
* !(논리 부정, not), ~(비트 반전 0<->1), +/-(부호연산), ++/--(선행증감),
* 캐스팅 (cast)
*
* 3. 산술 연산자
* +, -, /, *, %(모듈러: 나눈 후 나머지값을 가져감)
*
* 4. 쉬프트 연산자 -> 진짜 안 씀. 책에도 없음.
* <<, >>, >>>
*
* 5. 관계 연산자
* >, <, >=, <=, ==, !=
*
* 6. 비트 연산자 -> 진짜 비트를 연산...
* &, |, ^
*
* 7. 논리 연산자
* &&, ||
*
* 8. 삼항 연산자
* 조건식 ? 참일때 : 거짓일때
*
* 9. 배정대입 연산자
* =, +=, -=, /=, *=, %=
*
* 10. 후행증감 연산자
* ++/--
*
*/
public class Operator {
public static void main(String[] args) {
System.out.println();
String name = "홍길동";
char first = name.charAt(0);// 문자열 해당 번지수 글자 뽑기
System.out.println(first);
System.out.println(name.length());
Math.random();
// 선행증감
int num = 1;
int num2 = ++num;// ++ -> +1, num에 1을 더해서 num2에 넣어라.
System.out.println(num);// 2
System.out.println(num2);// 2
int num3 = ++num + num2;
System.out.println(num); // 3
System.out.println(num2); // 2
System.out.println(num3); // 5
// 계산 순서 ===== 선행증감, 산술, 대입
int num4 = --num + --num2 + --num3; // -- -> -1
System.out.println(num); // 2
System.out.println(num2); // 1
System.out.println(num3); // 4
System.out.println(num4); // 7
num = 1;
num2 = 1;
num3 = 1;
num2 = num--; //num을 num2에 먼저 넣고 num은 -1이 된 것.
System.out.println(num); // 0
System.out.println(num2); // 1
num4 = ++num - --num2 + num3--; // num3 = num3--; 이런 거 하면 --가 그냥 사라진다.
// num3 = ++num - --num2 + num3--; // 1 - 0 + 1 = 2인데(여기까지) 여기서 --하면 1?(X)
//num = num--; //이러면 --가 그냥 없어짐. num = num;
//num--; //이래야 1 빠진다.
System.out.println(num); // 1
System.out.println(num2); // 0
System.out.println(num3); // 0
System.out.println(num4); // 2
System.out.println(!true);//not
System.out.println(1 != 2);// == !=
System.out.println(1 != (num4 - 1));// == !=
// 5 1 3
//10진법 1을 2진법으로 변환
String result = Integer.toBinaryString(-7);
System.out.println(result);
//음수는 음수인 걸 표현하려고 앞에 1이 쭉 들어감.
//00000000000000000000000000000111 = 7
//11111111111111111111111111111001 = -7
//0000 0000 0000 0000 0000 0000 0000 1000 32bit (우린 64bit 컴이지만 자바는 32bit)
//11111111111111111111111111111000 = -8
//1과 0, -1
//00000000000000000000000000000001
//00000000000000000000000000000000
//11111111111111111111111111111111
//11111111111111111111111111111110 = -2
//11111111111111111111111111111101 = -3
//11111111111111111111111111111100 = -4
//11111111111111111111111111111011 = -5
//11111111111111111111111111111010 = -6
//11111111111111111111111111111001 = -7
//음수로 가면서 점점 1을 뺀다는 개념을 알고 있자.
//비트 반전은 쓸 일이 많지는 않을 것.
//비트 반전 0 -> 1, 1 -> 0
System.out.println( Integer.toBinaryString(~1) );
//00000000000000000000000000000001
//11111111111111111111111111111110
num = 2;
num2 = 2;
num3 = 6 % 3;
//나누는 값이 더 클 경우에는 작은 수를 리턴함.
//0부터 나누는 값보다 1 작은 숫자까지가 나온다.
//나누는 값으로 계속 뺀다고 생각하면... -> 주민번호 여자 남자 구분에 쓸 수 있다
System.out.println(num3);
num = 10;
System.out.println(Integer.toBinaryString(num));
//00000000000000000000000000001010 : num
// ---> 2칸 밀어
System.out.println(Integer.toBinaryString(num >> 2));
//00000000000000000000000000000010 : num >> 2
System.out.println(Integer.toBinaryString(num >> 3));
//00000000000000000000000000000001 : num >> 3
// <--- 2칸 밀어
System.out.println(Integer.toBinaryString(num >> 2));
//00000000000000000000000000101000 : num
System.out.println(10 << 2);//40
System.out.println(Integer.toBinaryString(-1));
//11111111111111111111111111111111
System.out.println(Integer.toBinaryString(-1 >> 2)); //음수니까 음수로 채워줌
//11111111111111111111111111111111
System.out.println(Integer.toBinaryString(-1 >>> 2)); //>>>는 음수여도 0으로 채워줌
//00111111111111111111111111111111
System.out.println(Integer.toBinaryString(-1 << 2));
//11111111111111111111111111111100
//비트 연산자 &(and 논리곱), |(파이프, or, 논리합), ^(XOR), !
// & = 양쪽 모두 참일 때 참
// | = 어느 한쪽이 참일 때 참
// ^ = 한쪽이 참이고, 다른 한 쪽이 거짓일 때 참
// 참^참 = 거짓
// 거짓^거짓 = 거짓
// 1011 = 11
// 0111 = 7
// 0011 = 3
System.out.println(11 & 7);
// 1011 = 11
// 0111 = 7
// 1111 = 15
System.out.println(11 | 7);
// 1011 = 11
// 0111 = 7
// 1100 = 12
System.out.println(11 ^ 7);
//1010 = 10
//0110 = 6
//1100 = 12
System.out.println(10 ^ 6);
//논리연산자 &&(AND), ||(OR)
System.out.println(1 + 1 == 2 && false);
/* AND
* 참 && 참 = 참
* 참 && 거짓 = 거짓
* 거짓 && 참 = 거짓
* 거짓 && 거짓 = 거짓
*
* OR
* 참 || 참 = 참
* 참 || 거짓 = 참
* 거짓 || 참 = 참
* 거짓 || 거짓 = 거짓
*/
System.out.println(1 > 0.5 || true);
System.out.println(1 != 1-2 || !true);//true
//삼항연산자
num = 1;
if(num == 1) {
System.out.println("1입니다.");
} else {
System.out.println("1이 아닙니다.");
}
//조건식 ? 참일때 문장 : 거짓일때 문장;
System.out.println(num == 1 ? "1입니다." : "1이 아닙니다.");
//배정대입
int number = 10;
number += 1;
// number = number + 1;
number -= 1;
number /= 2; //몫을 넣어준다.
System.out.println(number);
}
}
package dec05;
//제어문 = 조건문, 반복문
/*
* 조건문 = if, switch
*
*
* 반복문 = for, while, do~while
*
*
* if
* 제어문이란 프로그램이 실행될 때 특정 조건, 반복을 수행 또는 멈추게 하기 위해
* 필요한 명령 구문.
*
* 제어문은 조건에 따라 분기되는 조건문과
* 특정 구문을 반복하는 반복문으로 구성되어 있다.
*
* 조건문은
* if(조건식){
* 조건식이 참일 때 실행할 문장
* }
*
*
* if(조건식) {
* 참일 때
* } else {
* 거짓일 때
* }
*
* if(조건식1){
* 조건식1이 참일 때
* } else if(조건식2) {
* 조건식2가 참일 때
* } else {
* 위 조건식 1, 2가 모두 거짓일 때
* }
*
* switch ~ case 구문도 있다.
*
* if 조건문은 필요에 따라 구성할 수 있음.
* if만 정의해도 되고, if~else if()로 구성해도 됨.
* if와 else로만 구서앻도 됨.
* (특별한 규칙이 없다)
* 단, if가 없는 else if, else는 절대 불가능.
* 또한 필요에 따라 각 구문 내부에 또 다시 조건을 중첩시킬 수 있다.
*
*/
public class If01 {
public static void main(String[] args) {
int num = 4;
// 참/거짓이 나올 문장
if (num > 5) {
System.out.println("5보다 큽니다.");
} else if (num < 5) {
System.out.println("5보다 작습니다.");
} else {
System.out.println("5입니다.");
}
}
}
package dec05;
import java.util.Scanner;
public class If02 {
public static void main(String[] args) {
// 아래 내용을 충족하는 프로그램을 작성
int number = 12;
// 위 변수가 짝수인지 홀수인지 구분하는 if문 만들기
// 짝수면 "짝수입니다'
// 홀수면 "홀수입니다"라고 출력하기.
if (number % 2 == 0) {
System.out.println("짝수입니다.");
} else {
System.out.println("홀수입니다.");
}
number = 13;
System.out.println(number % 2 == 0 ? "짝수입니다." : "홀수입니다.");
// 스캐너 = 키보드로 들어오는 숫자, 문자를 받아 자바가 처리
// 타입 변수명 = 값;
Scanner sc = new Scanner(System.in); //사용 끝난 객체는 닫아줘야.
System.out.println("주민등록번호 뒤 첫숫자를 적어주세요.");
// 입력대기
int input = sc.nextInt();
System.out.println("당신이 입력한 숫자 : " + input);
// 남자 여자 판별
if (input == 2 || input == 4) {
System.out.println("여자입니다.");
} else if (input == 1 || input == 3) {
System.out.println("남자입니다.");
} else {
System.out.println("~~~");
}
//닫아주기
sc.close();
}
}
package dec05;
public class If03 {
public static void main(String[] args) {
//숫자 바꾸기
int num1 = 55;
int num2 = 30;
//두 숫자를 바꿔주시고 출력해주세요.
int temp;
temp = num1;
num1 = num2;
num2 = temp;
System.out.println(num1);
System.out.println(num2);
}
}
package dec05;
public class If04 {
public static void main(String[] args) {
int num1 = 90;
int num2 = 5;
// 정렬해주세요. 중복 제거, 들여쓰기, 정렬
if (num1 > num2) {
int temp = num1;
num1 = num2;
num2 = temp;
}
System.out.println(num1);
System.out.println(num2);
}
}
package dec05;
import java.util.Scanner;
//가위바위보 게임 만들기
public class If05 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("가위바위보 게임에 오신 것을 환영합니다.");
System.out.println("1 가위, 2 바위, 3 보");
System.out.print("입력 >_");
int input = sc.nextInt(); //사용자가 낸 1가위 2바위 3보
int com; // 컴퓨터가 뽑은 1가위 2바위 3보
//랜덤뽑기 Math.random(); = 0.0초과, 1.0미만의 랜덤한 수
com = (int) (Math.random() * 3 + 1);
System.out.printf("당신: %d%n",input);
System.out.printf("컴퓨터: %d%n", com);
// //쌤.
// if (com == 1 && input == 3
// || com == 2 && input == 1
// || com == 3 && input == 2) {
// System.out.println("컴퓨터가 이겼습니다.");
// } else if (com == 1 && input == 2
// || com == 2 && input == 3
// || com == 3 && input == 1) {
// System.out.println("당신이 이겼습니다.");
// } else if (input == com) {
// System.out.println("비겼습니다.");
// }
// &&가 ||보다 우선순위 높다고 한다... (괄호 불필요)
if (input == com) {
System.out.println("비겼습니다.");
} else if (input == 1 && com == 3 || input == 2 && com == 1 || input == 3 && com == 2) {
System.out.println("이겼습니다.");
} else {
System.out.println("졌습니다.");
}
// //넘 어렵게 한 거 같기도 하고...(되긴 된다.)
// if (input == com) {
// System.out.println("비겼습니다.");
// } else if (input - com == 2 || input - com == -2) {
// if (input == 1) {
// System.out.println("당신이 이겼습니다.");
// } else {
// System.out.println("컴퓨터가 이겼습니다.");
// }
// } else if (input > com) {
// System.out.println("당신이 이겼습니다.");
// } else {
// System.out.println("컴퓨터가 이겼습니다.");
// }
sc.close();
}
}
package dec05;
import java.io.IOException;
public class If06 {
public static void main(String[] args) throws IOException {
// 또 아스키 코드를 읽어주는 System.in.read()
System.out.println("0~9 중 하나의 숫자를 눌러주세요.");
int value = System.in.read() - 48; // 키보드 한 글자 읽음.
System.out.println(value);
}
}