[JAVA+국비교육] 증감연산자/산술연산자 & for문/if문
by 무작정 개발2021.12.23(3일 차)
'혼자 공부하는 자바'라는 교재를 받았다. 하지만 강사님은 챕터대로 하지 않고, 최대한 연관성 있게, 배운 내용을 최대한 섞은 예제를 통해 강의를 진행하신다 하셨다. 한 달 동안 java를 배우신다 했다. 학부생 시절 공부를 열심히 하지 않아서
개발실력이 좋은 편은 아니나 java를 배웠어서 아직까지는 무난하다.
오늘의 수업 내용
연산자
강사님은 연산자를 알려주면서 for문을 같이 쓰며 알려주셨다. 처음에 왜 이렇게 하지 했는데 수업을 다 들어보니 응용문제를 손쉽게 설명하시면서 한 문제로 2가지를 알려주셨다.
for문 (반복문)
[ for문 구조 ]
for(초기식; 조건식; 증감식) {
수행문 1;
수행문 2;
}
package com.day2;
public class Test1 {
public static void main(String[] args) {
float f = 0;
double d = 0;
//for(시작값; 최대값; 증가값)
for(int i=1;i<=100000;i++) { //i=i+1
f+=100000; //f = f + 100000;
d+=100000; //d = d + 100000;
}
System.out.println("float: " + (f/100000));
System.out.println("double: " + (d/100000));
}
}
package com.day2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
// system.in은 1바이트 문자를 읽어낸다.
// InputStreamReader은 1바이트 문자를 2바이트로 바꿔서 읽어낸다.
int num1,num2;
System.out.print("첫번째 수?");// 20
num1 = Integer.parseInt(br.readLine());
System.out.print("두번째 수?");// 5
num2 = Integer.parseInt(br.readLine());
System.out.printf("%d + %d = %d\t", num1, num2, (num1 + num2));
System.out.printf("%d - %d = %d\n", num1, num2, (num1 - num2));
System.out.printf("%d * %d = %d\t", num1, num2, (num1 * num2));
System.out.printf("%d / %d = %d\n", num1, num2, (num1 / num2));
System.out.printf("%d %% %d = %d\t", num1, num2, (num1 % num2));
// printf" "안에는 %d,%g 등의 값과의 혼동을 줄이기 위해 나머지 %를 %%으로 표기
System.out.println("num1>num2: " + (num1>num2));
System.out.println("num1==num2: " + (num1==num2));
String str;
//삼항연산자(조건?true값; : false값)
str = num1 % 2 == 0 ? "짝수" : "홀수";
str = num1 > 0 ? "양수" : (num1 < 0 ? "음수" : "영");
//1. 조건이 true이면 "양수"를 실행, 2. false이면 (num1<0?부분을 실행하는데 여기도
//3. 거짓이면 "음수" : "영" 실행
// (그리고) A and(&&) B : A, B 둘다 true이여만 결과가 true
// (또는) A OR(||) B : A,B 둘중 하나만 true이면 결과가 true
str = num1%4==0 && num1%100!=0 || num1%400==0?"윤년" : "평년";
System.out.println(num1 + ":" + str);
//https://blog.naver.com/lbr71004/222158448268
//※ 주의사항
//1. 삼항연산자를 사용하여 코드의 라인이 줄어들었다고 컴파일 속도가 빨라지는 것은 아닙니다.
//2. 삼항연산자를 중복해서 처리할 경우. 가독성이 떨어질 수 있으므로 중복처리는 피하는것이 좋습니다.
}
}
삼항 연산자
의미
조건을 만족하면 참값, 만족하지 못하면 거짓 값 반환
설명
조건? 참값 : 거짓 값
package com.day2;
import java.io.IOException;
public class Test3 {
public static void main(String[] args) throws IOException {
//@@자료형 char / String은 항상 "" 큰따옴표 써야함
//String str = "hyuen woo";
//char에서는 ''작은 따옴표를 써야하고 1바이트 or 2바이트 문자 1개만 저장 가능.(오로지 한 자만 저장 가능)
char ch, result;
System.out.print("한개의 문자?");// a(97)
ch = (char)System.in.read();//알파벳 한 자를 읽어내는 명령어 // read()의 반환값은 int라서 (char)을 써서 형변환
// 97이라는 숫자를 받아오는데 ch는 문자만 받을수 있어 형변환을 통해 char로 바꿔야한다.
//System.out.println(ch); // a 출력
//System.out.println(Integer.toString(ch));
//문자a를 입력했을때 그 문자의 아스키코드값을 보고싶을 때 쓴다. 그래서 97이 출력된다.
//97
result = ch>=65 && ch<=90? (char)(ch+32): //
// 조건 //
(ch>='a' && ch<='z'?(char)(ch-32):ch);
System.out.println(ch + ":" + result);
}
// 삼항 연산자
// (피연산자) ? (피연산자) : (값or연산식)
// true
// false
}
if - else 문
if문 만으로는 복잡한 내용을. 처리하는 데는 한계가 있다. if문 만을 사용할 때는 true일 때만 실행된다. 하지만 if else문은 false일 때
도 실행이 가능하다.
[ if - else 문 구조 ]
if(조건식) {
실행문; // 조건식이 true일 경우 실행
} else {
실행문; // 조건식이 false일 경우 실행
}
조건식이 true이면 if절의 실행문을. 실행하고, false면 else 절의 실행문이 실행된다.
package com.day2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test4 {
public static void main(String[] args) throws IOException {
// 제어문 반복문
//조건문(제어문) : for문, switch문
//반복문 :while문, for문, do - while문
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
int num;
String str = "";
System.out.print("수 입력?");
num = Integer.parseInt(br.readLine()); // 반환하는값은 문자라서 int로 변환
/*//if문 조건(단일 if문)
if(num%2 == 0) {
str = "짝수";
}
if(num%2 != 0) { // != 0 이라고 써도되고 == 1 이라 써도됨
str = "홀수";
} */
if(num %2 == 0) {
str = "짝수";
} else {
str = "홀수";
}
System.out.println(num + ":" + str); //Initialize variable 변수값 초기화 하라는 오류
}
}
Q. 퀴즈풀이
1번
1. 정수를 입력받아서 짝수, 홀수를 구별해서 출력.
예) 3 입력 시 -> 3 => 홀수
예) 4 입력 시 -> 4 => 짝수
package com.day2;
import java.util.*;
public class Number1 {
public static void main(String[] args) {
Scanner number = new Scanner(System.in);
int num = 0;
System.out.print("정수를 입력하세용 : ");
num = number.nextInt();
if(num%2 == 0) {
System.out.println(num +" => 짝수");
}
if(num%2 != 0) {
System.out.println(num +" => 홀수");
number.close();
}
}
}
[ 설명 ]
Scanner number = new Scanner(System.in); -> 사용자로부터 입력받기 위해 scanner 사용
int num = 0; -> num에 입력된 값을 넣기 위해 선언하고 초기화를 한다.
num = number.nextInt(); -> num에 입력된 값을 int형의 자료형으로 받기에 사용
if(num%2 == 0) {
System.out.println(num +" => 짝수"); -> num을 2로 나누었을 때 0인 것은 짝수
}
if(num%2!= 0) {
System.out.println(num +" => 홀수"); -> num을 2로 나누었을 때 0이 아닌 것은 홀수
2번
2. 두 개의 정수를 입력받고, 큰 숫자와 작은 숫자를 구분해서 출력.(if문 이용)
예) 20, 30 입력 시 -> 큰 숫자 30, 작은 숫자 20
package com.day2;
import java.util.*;
public class Number2 {
public static void main(String[] args) {
Scanner result = new Scanner(System.in);
int num1, num2 = 0;
System.out.println("숫자 2개를 입력하세요!"); //30 20
num1 = result.nextInt();//30
num2 = result.nextInt();//20
//2개 중 누가 큰지 비교
if(num1>num2) {
System.out.println("큰숫자 : " + num1);
System.out.println("작은숫자 : " + num2);
}
if(num1<num2) {
System.out.println("큰숫자 : " + num2);
System.out.println("작은숫자 : " + num1);
}
}
}
[설명]
Scanner number = new Scanner(System.in); -> 사용자로부터 입력받기 위해 scanner 사용
int num1, num2 = 0; -> num1, num2에 입력된 값을 넣기 위해 선언하고 초기화를 한다.
num1 = result.nextInt(); -> num1에 입력된 값을 넣기 위해 선언하고 초기화를 한다.
num2 = result.nextInt(); -> num2에 입력된 값을 넣기 위해 선언하고 초기화를 한다.
if(num1> num2) {
System.out.println("큰 숫자 : " + num1); -> if(만약) num> num2(num1이 num2보다 클 때)
System.out.println("작은 숫자 : " + num2); 큰 숫자(num1) / 작은 숫자(num2) 출력
}
if(num1 <num2) {
System.out.println("큰 숫자 : " + num2); -> 위와 동일(반대로)
System.out.println("작은 숫자 : " + num1);
3번
3. 네 개의 정수를 입력받고, 제일 큰 숫자와 제일 작은 숫자를 구분해서 출력.(if문 이용)
예) 20, 30, 40, 50 입력 시 -> 제일 큰 숫자 50, 제일 작은 숫자 20
package com.day2;
import java.util.Scanner;
public class Number3 {
public static void main(String[] args) {
Scanner result = new Scanner(System.in);
int num1, num2, num3, num4, temp;
System.out.println("4개의 수를 입력하세요!");
num1 = result.nextInt();//50
num2 = result.nextInt();//40
num3 = result.nextInt();//30
num4 = result.nextInt();//20
//4개의 수를 비교
if(num1<num2) {
temp = num1;
num1 = num2;
num2 = temp;
}
if(num3<num4) {
temp = num3;
num3 = num4;
num4 = temp;
}
if(num1<num3) {
temp = num1;
num1 = num3;
num3 = temp;
}
if(num2<num4) {
temp = num2;
num2 = num4;
num4 = temp;
}
System.out.println("제일 큰 숫자 : " + num1 + ", 제일 작은 숫자 : " + num4);
}
}
[설명]
if문 위쪽은 이전의 문제들과 같아 설명 생략.
num 1, 2, 3, 4 총 4개가 있다. 여기서 첫 번째 if문을 보면 만약 num1 <num2 이면, temp에 num1값을 넣어주고 num2에 num1값을 temp값을 num2에 넣어준다. 예를 들어 num1에 3 num2가 5라고 생각해 보자
그러면 위의 계산을 거쳐가면 num1이 num1에 5가 들어가고 num1에 num2에 2가 들어가는 것이다.
이렇게 비교를 하며 숫자를 작은 수부터 큰 수까지 정렬하는 방법이다. 이렇게 하면 가장 작은 수는 num1에 가장 큰 수는
num4에 들어간다.
4번
4. 년도를 입력받고, 윤년인지 아닌지를 출력하세요.
예) 2010 입력 시 -> 2010 => 평년
2012 입력 시 -> 2012 => 윤년
package com.day2;
import java.util.*;
public class Number4 {
public static void main(String[] args) {
Scanner result = new Scanner(System.in);
int num1;
System.out.println("년도를 입력 : ");
num1 = result.nextInt();
String str;
//str = num1%2==0?"짝수":"홀수";
//str = num1>0?"양수":(num1<0?"음수":"영");
str = num1%4==0 && num1%100!=0 || num1%400==0?"윤년":"평년";
System.out.println(num1 + "=> " + str);
}
}
[설명]
윤년 추가 규칙은 다음과 같다.
-
4로 나누어 떨어지는 해는 윤년, 그 밖의 해는 평년으로 한다.
그레고리력에는 다음과 같은 추가 규칙이 있다.
-
100으로 나누어 떨어지지만 400으로 나누어 떨어지지 않는 해는 평년으로 한다.(예: 1900년, 2100년)
-
400으로 나누어 떨어지는 해는 윤년으로 한다.(예: 2000년, 2400년)
str = num1%4==0 && num1%100!=0 || num1%400==0?"윤년":"평년";
위의 코드를 보자 num1은 사용자가 입력한 년도 값이다.
위의 코드를 설명하자면 입력한 연도가 4로 나눠지거나 연도가 100으로 나눠 떨어지지 않거나 400으로 나누어 떨어지면 평년이다. 그렇지 않으면 윤년이다.
== : 두 피연산자의 값이 같은지 검사
!= : 두 피연산자의 값이 다른지 검사
&& : 두 피연산자 모두 true여만 true (그리고)
|| : 두 피연산자 중 하나만 ture이면 trjue(또는)
삼항 연산자
조건? 참값 : 거짓 값
조건 : num1%4==0 && num1%100!=0 || num1%400==0
참값 : 윤년"
거짓 값 : "평년"
5번
5. 단가 15,800원짜리 상품을 일정 수량 이상 구입 시 할인을 해줍니다.
할인율은 다음과 같습니다.
10개 이상 -> 10%
20개 이상 -> 15%
30개 이상 -> 20%
판매금액을 계산해 봅니다.
예) 구입수량 15개인 경우 -> 구입수량: 15개, 판매 총금액: 213300원
package com.day2;
import java.util.*;
public class Number5 {
public static void main(String[] args) {
Scanner result = new Scanner(System.in);
float won = 15800;
int num;
System.out.println("몇개 구입했나요?");
num = result.nextInt();
if(num>=10) {
won = won * 0.9f;
}
if(num>=20) {
won = won * 0.85f;
}
if(num>=30) {
won = won * 0.8f;
}
System.out.println("구입 수량 : " + num + "개" + ", 판매 총 금액 : " + ((int)won*num)+"원");
}
}
[설명]
할인율 때문에 float won = 15800;으로 float형으로 선언한다.
if(num>=10) {
won = won * 0.9f; -> 10% 할인이라 won * 0.9f를 곱해서 won에 넣어줌
}
if(num>=20) {
won = won * 0.85f;
}
if(num>=30) {
won = won * 0.8f;
}
+ ((int) won*num)+"원"); -> won *num 한 값은 float형이기에 int로 형 변환을 해준다.
6번
6. 이름과 3과목의 점수를 입력받아 다음 조건에 따라 출력
-모든 과목의 점수가 40점 이상이고 평균이 60점 이상이면 합격
-한 과목이라도 40점 미만이고 평균이 60점 이상이면 과락(불합격)
-평균이 60점 미만이면 불합격
예)
이름? 홍길동
세 과목 점수? 60 70 80
이름 : 홍길동
총점 : 210, 평균 : 70, 판정 :합격
package com.day2;
import java.util.*;
public class Number6 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String name;
int kor,eng,mat,tot,avg;
String pan;
System.out.print("이름 ? ");
name=sc.next();
System.out.print("세과목 점수 ?");
kor=sc.nextInt();
eng=sc.nextInt();
mat=sc.nextInt();
tot=kor+eng+mat;
avg=tot/3;
if(kor>=40&&eng>=40&&mat>=40&&avg>=60)
pan="합격";
else if(avg>=60)
pan="과락";
else
pan="불합격";
System.out.println("이름 : " + name);
System.out.println("총점 : " + tot + " 평균 : " + avg + " 판정 : " + pan);
}
}
'Language > Java' 카테고리의 다른 글
[JAVA+국비교육] 배열 기초 (0) | 2021.12.30 |
---|---|
[JAVA+국비교육] 반복문 (0) | 2021.12.30 |
[JAVA+국비교육] 변수 선언과 자료형 (0) | 2021.12.27 |
[JAVA+국비교육] 개발 환경 설치 및 출력 (0) | 2021.12.25 |
자바의 정석 | Ch 06 - 객체지향 프로그래밍1-2 (0) | 2021.12.17 |
블로그의 정보
무작정 개발
무작정 개발