[JAVA+국비교육] 증감연산자/산술연산자 & for문/if문
by 무작정 개발2021.12.23(3일 차)
'혼자 공부하는 자바'라는 교재를 받았다. 하지만 강사님은 챕터대로 하지 않고, 최대한 연관성 있게, 배운 내용을 최대한 섞은 예제를 통해 강의를 진행하신다 하셨다. 한 달 동안 java를 배우신다 했다. 학부생 시절 공부를 열심히 하지 않아서
개발실력이 좋은 편은 아니나 java를 배웠어서 아직까지는 무난하다.
오늘의 수업 내용
연산자






강사님은 연산자를 알려주면서 for문을 같이 쓰며 알려주셨다. 처음에 왜 이렇게 하지 했는데 수업을 다 들어보니 응용문제를 손쉽게 설명하시면서 한 문제로 2가지를 알려주셨다.
for문 (반복문)
[ for문 구조 ]
for(초기식; 조건식; 증감식) {
수행문 1;
수행문 2;
}
javapackage 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)); } }
javapackage 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. 삼항연산자를 중복해서 처리할 경우. 가독성이 떨어질 수 있으므로 중복처리는 피하는것이 좋습니다. } }
삼항 연산자
의미
조건을 만족하면 참값, 만족하지 못하면 거짓 값 반환
설명
조건? 참값 : 거짓 값
javapackage 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 절의 실행문이 실행된다.
javapackage 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 => 짝수
javapackage 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
javapackage 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
javapackage 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 => 윤년
javapackage 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원
javapackage 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, 판정 :합격
javapackage 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); } }
블로그의 정보
무작정 개발
무작정 개발