오늘 자바시간에는 시작으로 논리 연산자,논리 이항 연산자로 시작하였다.
논리 연산자란 서로 다른 boolean 연산하여 새로운 결과를 만들어 낸다.
대표적으로 and(&&),or( || ), not( ! )이 있다.
and (&&)연산자는 두개의 조건을 비교했을때 둘다 참일때 true를 출력하다
or ( || )연산자는 둘중 하나의 조건만 충족하면 true를 출력한다.
boolean flag = (num%2 == 00) && (num1%3 == 0)
boolean flag = (num%2 == 00) || (num1%3 == 0)
이런식으로 사용가능하다.
and조건은 JSP에서 이런식으로 사용가능하다.
for(int i = 0; cookies != null && i<cookies.length();i++)
cookie[] cookies = request.getcookies();
해석해보면 cookies가 없지 않고, cookies의 길이보다 i가 작다면 반복을 수행한다.
손님이 쿠폰을 가지고 가게를 간다고 가정하였을때 손님이 쿠폰을 가지고 있는지 확인을 해야 쿠폰을 적립시켜준다고 원리이다.
&&(and)조건에서 앞쪽이 거짓이면 뒷 조건을 계산하지 않는다
삼항연자자란 1항에는 조건, 2항에는 조건이 참일때 값, 3항에는 거짓일 때 값을 출력한다.
adult = age >= 20 ? "성인" : "미성년자";
age가 20이상이라면 "성일" 아니라면 "미성년자"를 adult에 참조시킨다.
삼항연산자의 예시로 간단한 계산기를 만들수 있다.
먼저 Scanner클래스를 선언한다.
n1 = Integer.parseInt(sc.nextLine()); 이런식으로
그후 2개의 정수값을 입력받도록 한다.
다음으로 연산자를 입력받기 위해서
oper = sc.nextLine().charAt(0);
입력받은 문자열의 0번째 글자만 저장한다.
answer = oper == "+" ? n1 + n2:
oper이 + 이면 n1+n2를 계산한다.
이런식으로 아래에도 다양한 연산자를 사용가능하다.
오늘은 하루중 대부분을 문제푸는데에 시간을 썼다.
그중 어려웠던 문제 몇개를 써보도록 하겠다.
1. 최고값을 구하는 문제다.
우선 Scanner을 만든다.
그다음 n1 = Integer.parseInt(nextLine());으로 3개의 정수를 불러오게 한다.
그 불러온 정수를 n1,n2,n3변수에 넣어 문자열 int data[] = {n1,n2,3} 을 만든다.
이제 비교를 하는데
if(n1 > n2 && n1 >n3){ //n1이 제일 크면 max1에 n1값이 들어간다.
max1 = n1;
}else if { (n2>n1 && n2 > n3){ //아니라면 n2가 제일큰지 비교한다
max1 = n2; //그렇다면 max1에 n2값이 들어간다
}else{ max1 = n1; //다 아니라면 결국 max1 에 n1값이 들어간다.
단항증감연산자는 ++a, a++, --a, a-- 등 가장 많이 쓰는 이 4가지가 있다.
전치 증가 연산은 너무 간단해서 패스하고
후치 증감 연산은 a++ 1을 증가시키고 그 값을 감시 참조하고 출력은 하지 않고 있다가 다음 출력이 있을때 1을 증가시켜서 출력한다.
(일단 이렇게 이해하고 있다;;;;)
2. 지하철이 지나갈 구간의 예상시간을 구하는 문제다.
전제조건은 한 구간당 3분이며 60분이상은 시간단위도 출력해야한다.
똑같이 Scanner을 만들어주고 time(시간)=(구간)*3 으로 변수를 만들어준다.
이제 조건문을 건다.
if(time>60){
result = String.format("%d시간 %d분", time/60,time%60); //만약 150분이라면 150/60=2시간 150%60=30분
}else{
result = String.format("%d분",time);
}
Syso(result);
3.생년월일 6자리를 정수로 입력받아서, 년, 월, 일로 구분하고
현재 연도를 이용하여 나이를 계산하세요
그런 다음, 출생년도는 4자리로 만들어서 연월일과 현재 나이를 출력해주세요
나이가 20이상이면 성인, 아니면 미성년자로 만들어서 함께 출력합니다
입력 : 980623
출력 : 1998년 06월 23일 26네, 성입입니다.
Scanner선언후
문자열 숫자6자리입력 input = Integer.parseInt(sc.nextLine());
int Current = 2023
day = input % 100; //980623을 입력받았다면 9206.23 23이 나머지다
input = input / 100; // 9806.23 input에 9806이 들어간다.
month = input%100; // 9806의 나머지는 06이다.
year = input / 100; //9806/100=98이다
if(year <= 23){ // 2000년생 이전에 태어난 사람을 "98<=23 or 01<=23" 이런식으로 구분해서
year = year+2000; //2000년 이후는 01+2000=2001
}else { year = year + 1900; //98+1900=1998
age = Current-year;
if(age>20){
adult = "성인";
}else {
adult = "미성년자";
마지막으로 나이를 구하고 성인인지 여부를 확인한다.
4. 오늘 가장 어려웠던 놀이기구 이용 요금문제이다.
기본 요금은 3000원 이며, 10분마다 500원의 추가요금이 발생한다
요금표는 다음과 같다
0 ~ 30 : 3000
31 ~ 40 : 3500
41 ~ 50 : 4000
51 ~ 60 : 4500
반복문 사용 없이, if를 이용하여 시간을 분 단위로 입력받고, 요금을 계산하여 출력하세요.
int time,extra,charge = 0;
Scanner sc = new Scanner(System.in);
time = Integer.parseInt(nextIne());
charge = 3000;
if(time<=30){ //이쪽은 그냥 기본요금이다
System.out.println(charge);
}else if(time>30){ // 30분 이상이면
time = time-30; // 40-30=10 추가요금 10분에 대해서 60-30=30
extra = ((time)/10)*500; // (10/10)*500=500 (30/10)*500=1500 이런식으로 추가요금을 계산해
System.out.println(charge+extra); 기본요금을 더해준다
}
}
}
오늘은 문제만 주구장창풀어서 상당히 피곤하다.
경험이 있으신 분들은 쉬울실수 있겠지만 직접 이렇게 문제를 풀어보는것은 처음이라 한문제를 푸는데에 다른 사람들보다 시간이 더욱 많이 걸리고 말았다.
앞으로 계속 문제를 풀게 되고 코딩테스트도 연습하다보면 실력도 향상될 것이라고 믿어 의심치않다.
그럼 오늘정리는 여기서 끝내겠다.
'JAVA 공부' 카테고리의 다른 글
자바의 기초 - 객체지향파트 중 생성자(Constructor) (0) | 2023.03.23 |
---|---|
자바의 기초 - loop문 응용, array(배열) (0) | 2023.03.19 |
자바의 기초 - for문 (0) | 2023.03.17 |
자바의 기초 - String(문자열) (0) | 2023.03.15 |
자바의 기초-연산자,스캐너,printf,equals함수 (0) | 2023.03.11 |