728x90
반응형
If 실습
If_Example05 : 윤년 구하기
import java.time.Year;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class If_Example05 {
public static void main(String[] args) {
/*
* 윤년 구하기 연도를 입력받고 입력받은 연도가 윤년인지 판별
* 1. 연수가 4로 나누어 떨어지는 해는 윤년
* 2. 연수가 100으로 나누어 떨어지는 해는 평년
* 3. 연수가 400로 나누어 떨어지는 해는 윤년
* 4년마다 오고 100년 마다는 아니지만 400년마다는 윤년이된다.
*/
Scanner sc = new Scanner(System.in);
System.out.println("연도 : ");
int year = sc.nextInt();
String result = "평년";
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
result = "윤년";
}
System.out.println(result);
// java.time Year클래스
boolean isLeap = Year.isLeap(year);
System.out.println(isLeap ? "윤년" : "평년");
// 그레고리력
GregorianCalendar gc = new GregorianCalendar();
String result2 = gc.isLeapYear(year) ? "윤년" : "평년";
System.out.println(result2);
}
}
- java 안에 Year라는 클래스를 불러오고, Year 클래스 안의 isLeap라는 메서드를 불러온다. boolean 타입.
- isLeap(파라미터) : 파라미터 안에는 년도가 들어간다.
- java 안의 Year 클래스의 isLeap 메서드
- isLeap 을 ctrl + 클릭하면 isLeap 메서드에 대한 내용이 보인다.
- (year & 3) 에서 &는 비트연산자 이다.
- year를 이진법으로 바꿨을 때 왼쪽에서 3 번째 자리(4) 가 0이면 4의 배수가 아닌 것. 1이면 4의 배수이다.
- 이진법) 111 : 4 + 2 + 1 = 7 , 101 : 4 + 0 + 1 = 5 , 100 : 4 + 0 + 0 = 4
- 그레고리력
- GregorianCalendar 클래스
- 1582년에 교황 그레고리오가 만들었기 때문에, 1582년 이후의 년도만 윤년 평년을 판가름할 수 있다.
If_Example06 : bmi 계산
- Math 클래스에는 계산을 할 수 있는 다양한 메서드들이 있다.
- Math.abs( ) : 절댓값
- Math.pow(제곱할 수, 몇제곱인지) : 제곱값 계산
- Math.pow(2, 3) : 2의 3제곱 = 8
- Math.max(A, B) : A와 B 중 큰 값 반환
- Math.min(A, B) : A와 B 중 작은 값 반환
- sqrt(제곱근), round(반올림), floor(버림), random(무작위 수) 등 다양한 메서드 활용 가능
package chapter03.condition;
import java.util.Scanner;
public class If_Example06 {
public static void main(String[] args) {
/*
* BMI 계산하기
* BMI (체질량지수) 는 몸무게를 키(미터단위)의 제곱으로 나눠서 계산
* 이 계산 결과에 따라 다음과 같이 판단.
* - 저체중 : 18.5 미만
* - 정상 : 18.5, 23 미만
* - 과체중 : 23 이상 25 미만
* - 비만 : 25 이상
*
* 키 (cm), 몸무게를 입력 받아 BMI를 계산하라.
* 출력 결과
* 키 : 180.8
* 몸무게 : 80.5
* BMI 지수 : 24.62629219 (과체중)
*/
Scanner sc = new Scanner(System.in);
System.out.println("키 입력:");
double height = sc.nextDouble();
System.out.println("몸무게 입력:");
double weight = sc.nextDouble();
double bmi = weight / Math.pow((height / 100), 2);
String condition = "";
if(bmi>=25) {
condition = "비만";
}else if(bmi >= 23) {
condition = "과체중";
}else if(bmi >= 18.5) {
condition = "정상";
}else {
condition = "저체중";
}
System.out.println(condition);
sc.close();
}
}
Switch 실습
Switch_Example01 : 년도별 띠 구하기
import java.util.Scanner;
public class Switch_Example01 {
public static void main(String[] args) {
/*
* 출생연도를 입력받아 띠를 출력.
* 띠는 12개 이며, 연도를 12로 나누었을 때의 나머지값에 따라
* 아래와 같이 구분된다.
* 원숭이 0, 닭 1, 개 2,
*
* 출력 결과 :
* 연도를 입력하세요 : 2001
* 2001년 생은 뱀띠입니다.
*/
Scanner sc = new Scanner(System.in);
System.out.println("연도를 입력하세요:");
int birthYear = sc.nextInt();
String repAnimal = "";
switch (birthYear % 12) {
case 0: repAnimal = "원숭이"; break;
case 1: repAnimal = "닭"; break;
case 2: repAnimal = "개"; break;
case 3: repAnimal = "돼지"; break;
case 4: repAnimal = "쥐"; break;
case 5: repAnimal = "소"; break;
case 6: repAnimal = "호랑이"; break;
case 7: repAnimal = "토끼"; break;
case 8: repAnimal = "용"; break;
case 9: repAnimal = "뱀"; break;
case 10: repAnimal = "말"; break;
case 11: repAnimal = "양"; break;
}
System.out.println(birthYear + "년생은 " + repAnimal + "띠입니다.");
}
}
Switch_Example02 : 사칙연산 계산기
import java.util.Scanner;
public class Switch_Example02 {
public static void main(String[] args) {
/*
* 사칙 연산 계산기
* 정수 2개와 연산자(+, -, *, /)를 입력 받아 결과를 출력.
* 단, 나눗셈 연산시 분보가 0일 경우 "0으로 나눌 수 없습니다."를 출력.
* 출력 결과 :
*
*/
Scanner sc = new Scanner(System.in);
System.out.println("연산자: ");
String operator = sc.next();
System.out.println("정수1 입력:");
double num1 = sc.nextDouble();
System.out.println("정수2 입력:");
double num2 = sc.nextDouble();
if(operator.equals("/") && num2 == 0) {
System.out.println("0을로 나눌 수 없습니다.");
System.exit(0);
}
double result = 0;
switch (operator) {
case "+" : result = num1 + num2; break;
case "-" : result = num1 - num2; break;
case "*" : result = num1 * num2; break;
case "/" : result = num1 / num2; break;
}
System.out.println("결과: " + result);
sc.close();
}
}
반복문
- 같은 문장을 반복해 사용할 경우 반복 조건, 반복 횟수의 제어를 통해 반복 처리
- while 문
- do-while 문
- for 문
- 예약어 break, continue -> 반복문을 제어한다.
- break 는 반복문 자체를 탈출.
- continue 는 해당 반복만 skip 하고 다음 반복 진행됨.
while 문
- 조건식이 true 라면 { } 내의 코드를 반복
- 조건식 검사 → 코드블럭 수행 (반복)
do-while 문
- 조건식이 어떻든 일단 do의 코드 블록 { } 내 코드가 우선 1회 수행됨. 그 이후에 조건식 검사. true면 다시 do { } 내 코드가 수행.
- do 내 코드 수행 → 조건식 검사 (반복)
for 문
- 초기화(시작점), 조건식(반복문 종료 조건), 증감식의 순서를 반드시 지켜야함.
- 세미콜론 ( ; ) 은 두 개만 들어간다.
- 초기화식 : int i = 0 일 경우, 제어변수 i 는 0부터 시작한다.
- 조건식 : i <= 10 일 경우, i 가 10 이하 일 때까지 반복문을 수행한다.
- 증감식 : i++ 일 경우, 반복문이 한 번 수행 완료될 때마다 i 를 1 증가시킨다.
- 첫 반복 이라면, 수행이 완료되기 전까지는 i = 0 인 상태이다.
- 초기화 생성 → ( 조건식 검사 → 반복문 코드 수행 → 증감식 수행 )
- 괄호 내 부분이 반복됨.
- 조건식 검사 시 false 면 반복문 중지
예약어 break, continue
break : stop 개념
- i 가 1부터 시작해서 10 이하 일 때까지 반복문 수행
- 만약 i 가 7 이면 break에 의해서 아예 반복문 탈출
continue : skip 개념
- i 가 1부터 반복문 시작해서 10 이하 일 때까지 반복문 수행
- 만약 i 가 7 이면 continue에 의해서 여기까지만 수행하고 다음 반복문이 진행. 그래서 증감식 i++ 에 의해 i 는 8이 된 채로 반복문 계속 수행.
for1 : for 문 연습
public class for1 {
public static void main(String[] args) {
// for 문
for (int i = 1; i <= 5; i++) {
System.out.println(i + "번 학생 성적처리");
}
// 1~100 정수의 합
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println(sum);
// 1~100 중 짝수의 합
// 1 번째 풀이
int sum2 = 0;
for (int i = 0; i <= 100; i = i + 2) {
if (i % 2 == 0)
sum2 += i;
}
System.out.println(sum2);
// 2 번째 풀이
int sum3 = 0;
for (int i = 0; i <= 100; i++) {
// 2로 나눠떨어지면 더해라
// if(i % 2 == 0) sum3 += i;
// 2로 나눠떨어지지 않으면(홀수) skip해라
// continue 아래 코드는 수행되지 않고 skip 되고
// 다음 반복문 수행됨.
if (i % 2 != 0)
continue;
sum3 += i;
}
System.out.println(sum3);
}
}
초기화식, 조건식, 증감식을 반드시 해당 위치에 적어야하나요? 아니요!
int j= 0;
for( ; ; ) {
System.out.println( j + "입니다.");
if ( j == 3 ) break;
j++;
}
- 초기화 : int j = 0;
- 조건식 : if ( j == 3 ) break;
- 증감식 : j++;
for2 : for문의 전역 변수 활용
public class for2 {
public static void main(String[] args) {
// over 100
int sum = 0;
// for 문 안에 선언식(int i)을 적으면 지역변수가 되므로
// for문 안에서만 i 를 사용할 수 있다. for문 밖에서는 사용 불가능.
// 우리는 i 라는 값을 for문 밖에서 사용해야하므로
// 선언식 자체를 for 문 밖에서 수행해서 전역변수로 만든다.
int i;
for (i = 1; i < 100; i++) {
sum += i;
if (sum > 100)
break;
}
System.out.println("합계가 100이 넘는 시점은 " + i + " 입니다.");
}
}
- 지역 변수와 전역 변수는 상대적인 관점에서 정의된다.
- 나보다 더 바깥에서 선언됐으면 전역 변수, 나보다 더 안쪽에서 선언됐으면 지역 변수 라고 쉽게 생각해도 되긴하다.
for3 : 지역변수 vs 전역변수
public class for3 {
public static void main(String[] args) {
// 전역 변수
int globalVariable = 10;
if (true) {
System.out.println("IF문 내 전역변수 출력: " + globalVariable);
// 지역 변수
int localVariable = 100;
System.out.println("IF문 내 지역변수 출력: " + localVariable);
}
System.out.println("IF문 밖 전역변수 출력: " + globalVariable);
// System.out.println("IF문 밖 지역변수 출력: " + localVariable);
// if 문 밖 지역 변수 출력 코드는 에러가 뜬다.
// 지역 변수를 밖에서 호출 불가능.
}
}
nestLoop1 : 중첩 반복문 (구구단)
public class nestLoop1 {
public static void main(String[] args) {
// 중첩 반복문
// 구구단
for (int i = 2; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
System.out.println(i + " * " + j + " = " + (i * j));
}
System.out.println();
}
// 구구단 가로 ver.
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
// \\t : 특정 간격만큼 띄어쓰기
System.out.print(j + " * " + i + " = " + (i * j) + "\\t");
}
System.out.println();
}
}
}
nestLoop2 : 숫자 맞추기
import java.util.Scanner;
public class nestLoop2 {
public static void main(String[] args) {
// 숫자 맞추기
Scanner sc = new Scanner(System.in);
// Math.random() 을 통해
// 0 ~ 1 중 소수를 가진 무작위 난수가 발생.
// 거기서 10을 곱하면 1의 자리가 올라오고
// (int) 강제 형변환에 의해 정수만 남는다.
// 그럼 1 ~ 10 중 무작위 숫자가 된다.
int num = (int) (Math.random() * 10) + 1;
for (;;) {
System.out.println("숫자를 맞춰보세요(1~10): ");
int input = sc.nextInt();
if (input == num) {
System.out.println("정답");
break;
} else if (input > num) {
System.out.println(input + "보다 작음");
} else {
System.out.println(input + "보다 큼");
}
}
}
}
728x90
반응형