일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 다형성
- NestedFor
- 컬렉션 타입
- Java
- 예외처리
- 자바
- EnhancedFor
- 객체 비교
- 인터페이스
- 제네릭
- 대덕인재개발원
- 예외미루기
- 집합_SET
- abstract
- 정수형타입
- 한국건설관리시스템
- 메소드오버로딩
- GRANT VIEW
- 추상메서드
- oracle
- exception
- 자동차수리시스템
- 어윈 사용법
- 환경설정
- 컬렉션프레임워크
- cursor문
- 사용자예외클래스생성
- 생성자오버로드
- 참조형변수
- 오라클
- Today
- Total
거니의 velog
230706 자바 강의 본문
[Homework_02_02.java 문제풀이]
package ddit.chap02.sec03;
public class Homework_02_02 {
public static void main(String[] args) {
// 1년은 356.2422일이다. 이를 xxx일 xx시간 xx분 xx초로 환산하시오.
// 모범 답안
// 날수
double year = 365.2422;
int days = (int)year;
// 시간
double hours = (year - days) * 24;
int hour = (int)hours;
// 분
double minutes = (hours - hour) * 60;
int minute = (int)minutes;
// 초
double seconds = (minutes - minute) * 60;
int second = (int)seconds;
System.out.println("1년은 " + days + "일 " + hour + "시간 " + minute + "분 " + second + "초 입니다."); // 1년은 365일 5시간 48분 46초 입니다.
}
}
operand + operand => 이항 연산자.
단항 연산자?(우선순위 가장 높음)
가장 많이 사용되는 연산자가 증감 연산자(++, --).
int res = 0;
int i = 10;
res = i++; 후위식 => i = 11, res = 10.
res = ++i; 전위식 => I = 11, res = 11.
System.out.println(i++); // 10
System.out.println(++i); // 11
! = not. 토글 기능
~ = 1의 보수. 음수를 구할 때 사용.
% 나머지 구하기
100의 나머지 경우의 수 : 100가지(0~99)
7의 나머지 경우의 수 : 7가지(0~6)
[달력 구하는 공식]
서기 1년 1월 1일부터 오늘 날짜까지 평년 윤년 다 계산해서 구함.
거기에 +1
7로 나눈 나머지 값으로 요일을 구함. 0(일요일) ~ 6(토요일)
[윤년 기준]
(year % 4 == 0 && year % 100 == 0) || year % 400 == 0
operand + operand => 연산자 오버로딩이 일어남.
문자열 + anytype => 하나의 문자열로 합쳐짐(concat).
!, <> 같지 않다.
instanceof. 자식 클래스가 부모 클래스의 이름으로 들어갈 때, 자식 클래스가 본연 클래스로 환원될 때, 부모와 자식의 클래스 타입이 같은가?
%, |, ^ : 비트 별 논리 연산자. 결과가 숫자값(0, 1 => 배타적 논리합). 비트별로 두 개가 서로 같으냐 다르냐 비교.
<시프트 연산자>
a << b 오른쪽 시프트.
- 데이터 a를 b 비트만큼 오른쪽으로 평행 이동. 빈 공간이 왼쪽에 발생.
부호 bit는 이동되지 않음. 0 양수, 1 음수.
왼쪽에 발생된 빈 공간은 부호 bit가 확장되어 들어감. padding.
결과. a를 2^b 값으로 나눈 몫.
17 >> 2 = 17/2^2 = 몫 4, 나머지 1.
(부호비트) 00010001 = 17.
2비트 이동하면 00000100 = 4.
a << b 왼쪽 시프트.
a를 왼쪽으로 b 비트만큼 왼쪽으로 평행이동. 빈 공간이 오른쪽에 발생.
발생된 빈 공간은 ‘0’으로 채움
부호 비트는 이동되지 않음.
a * 2^b의 결과
17 << 2 = 17*4 = 68.
00010001 = 17.
01000100 = 68.
a >>> b => 로지컬 시프트.
a를 b비트만큼 오른쪽으로 평행이동.
부호비트도 같이 이동된다는 특징이 있음.
남는 기억 장소는 0으로 채워짐.
따라서 양수로 변함. 부호 비트가 0으로 바뀌므로.
[UnaryOperatorExample.java]
package ddit.chap03.sec01;
public class UnaryOperatorExample {
public static void main(String[] args) {
// 단항 연산자 : (++, --) / (+, -) => 부호 연산자 / ! (not)
incrementOperator();
signOperator();
}
public static void incrementOperator() {
int res = 0;
int incre = 10;
int decre = 10;
res = incre++;
System.out.println("res : " + res + ", incre : " + incre); // res : 10, incre : 11
res = 0;
res = --decre;
System.out.println("res : " + res + ", decre : " + decre); // res : 9, decre : 9
int[] arr = {10, 20, 30, 40, 50};
for(int i=0; i<arr.length;) {
// System.out.println(arr[++i]); // 오류. Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
System.out.println(arr[i++]); // 정상
}
}
public static void signOperator() {
// 음수(-)와 양수(+ 또는 생략)
int sum = 0; // 결과값
int sign = -1; // 부호
int cnt = 1; // 시작 값(1,2,3...10)
while(cnt <= 10) {
sign = sign * (-1);
sum = sum + (sign * cnt);
if(sign > 0 && cnt != 1) {
System.out.print("+" + cnt);
}else {
System.out.print(sign * cnt);
}
cnt++;
}
System.out.println("=" + sum); // 1-2+3-4+5-6+7-8+9-10=-5
}
}
[BinaryOperatorExample.java]
package ddit.chap03.sec01;
import java.util.Scanner;
public class BinaryOperatorExample {
public static void main(String[] args) {
// arithmeticOperator();
// relationalOperator();
// relationalOperator2();
logicalOperator();
}
public static void arithmeticOperator() {
// +, -, *, /, %
// 1~100 사이의 짝수의 합과 홀수의 합을 출력.
int even = 0; // 짝수의 합
int odd = 0; // 홀수의 합
for(int i = 1; i < 101; i++) {
if(i % 2 == 0) {
even += i;
}else {
odd += i;
}
}
System.out.println("짝수의 합 = " + even);
System.out.println("홀수의 합 = " + odd);
}
public static void relationalOperator() {
// 비교(관계)연산 : 크기 비교( >, <, =, >=, <=, !=(<>) )
// 결과는 true / false 이고, 주로 조건문에 사용.
// 키보드로 입력받은 점수가
// 90-100 : A학점
// 80-89 : B학점
// 70-79 : C학점
// 60-69 : D학점
// 그 이하 : F학점을 출력
String grade = "";
Scanner sc = new Scanner(System.in);
System.out.print("점수 : ");
int score = sc.nextInt();
if(score >= 90) {
grade = "A학점";
}else if(score >= 80 && score <= 89) {
grade = "B학점";
}else if(score >= 70) {
grade = "C학점";
}else if(score >= 60) {
grade = "D학점";
}else {
grade = "F학점";
}
sc.close();
System.out.println(score + "점은 " + grade + " 입니다.");
}
public static void relationalOperator2() {
// 키보드로 나이(10세 이상)를 입력받아 그 사람이 어느 구간에 속하는지 출력
// ex) 35세이면 -> "30대 입니다.", 56세이면 "50대 입니다."
// String ageRange = "";
// Scanner sc = new Scanner(System.in);
// System.out.print("나이 : ");
//// int age = sc.nextInt();
// int age = Integer.parseInt(sc.nextLine());
//
// if(age >= 60) {
// ageRange = "60대 이상";
// }else if(age >= 50) {
// ageRange = "50대";
// }else if(age >= 40) {
// ageRange = "40대";
// }else if(age >= 30) {
// ageRange = "30대";
// }else if(age >= 20) {
// ageRange = "20대";
// }else if(age >= 10) {
// ageRange = "10대";
// }else {
// ageRange = "10대 이하(유년기)";
// }
//
// sc.close();
//
// System.out.println(age + "세는 " + ageRange + " 입니다.");
/////////////////////////////////////
Scanner sc = new Scanner(System.in);
System.out.print("나이 : ");
int age1 = Integer.parseInt(sc.nextLine()); // 엔터키 입력 전까지 문자열을 입력받아 정수로 변환.
int ageRange2 = (age1 / 10) * 10;
String message = ageRange2 + "대입니다.";
System.out.println(age1 + "세는 " + message);
}
public static void logicalOperator() {
// 논리 연산자 : !(not), &&(and), ||(or), 연산순위 나열 순.
// 자신의 출생년도를 입력 받아 윤년과 평년을 판단하시오.
// 윤년 : (4의 배수이면서 100의 배수가 아닌 해이거나) (400의 배수가 되는 해).
Scanner sc = new Scanner(System.in);
System.out.print("출생연도 : ");
int year = Integer.parseInt(sc.nextLine()); // 엔터키 입력 전까지 문자열을 입력받아 정수로 변환.
if((year%4==0 && year%100!=0) || (year%400==0)) {
System.out.println(year + "년은 윤년입니다."); // 2020년 기준 윤년
}else {
System.out.println(year + "년은 평년입니다.");
}
sc.close();
}
}
[BinaryOperatorExample02.java]
package ddit.chap03.sec01;
public class BinaryOperatorExample02 {
public static void main(String[] args) {
bitwiserOperator();
shiftOperator();
assginmentOperator();
}
public static void bitwiserOperator() {
// |, &, ^(exclusive-or, 배타적 논리합)
// 연산결과가 숫자값.
// 34 = 00100010;
// 19 = 00010011;
// & = 00000010; - 2 => 두 수 사이 곱하기
// | = 00110011; - 51
// ^ = 00110001; - 49
int num1 = 34;
int num2 = 19;
System.out.println("& (비트별 AND) = " + (num1 & num2)); // & (비트별 AND) = 2
System.out.println("| (비트별 OR) = " + (num1 | num2)); // | (비트별 OR) = 51
System.out.println("^ (비트별 ex-OR) = " + (num1 ^ num2)); // ^ (비트별 ex-OR) = 49
}
public static void shiftOperator() {
// >>(right shift), <<(left shift), >>>(logical right shift)
int num1 = 17;
int num2 = -17;
System.out.println("num1>>2 : " + (num1>>2)); // num1>>2 : 4
System.out.println("num1<<2 : " + (num1<<2)); // num1<<2 : 68
System.out.println("num2>>>2 : " + (num2>>>2)); // num2>>>2 : 1073741819
}
public static void assginmentOperator() {
// =
// 결합 연산자 : +=, -=, *=, /=, %=
// 연산식의 형태가 "변수1 = 변수1 연산자(+, -, *, /, %) 값"
// -> 변수 1은 연산에 참여하고 결과가 기억되는 기억공간.
// sum = sum + cnt;
// sum += cnt;
// sum = sum * (cnt + 1);
// sum *= (cnt + 1);
int sum = 0;
for(int i=0; i<1000; i++) {
// sum = sum + i;
sum += i;
}
System.out.println("sum : " + sum);
}
}
'대덕인재개발원 > 대덕인재개발원_Java' 카테고리의 다른 글
230710 자바 강의 (0) | 2023.07.12 |
---|---|
230707 자바 강의 (0) | 2023.07.12 |
230705 자바 강의 (0) | 2023.07.12 |
230704 자바 강의 (0) | 2023.07.11 |
230703 첫 자바 강의 (0) | 2023.07.11 |