8일차 과제 피드백
package condition;
import java.lang.*;
import java.util.Scanner;
public class Test12 {
public static void main(String[] args) {
// 입력
Scanner sc = new Scanner(System.in);
System.out.println("연도를 입력하세요");
int year = sc.nextInt();
System.out.println("월을 입력하세요");
int month = sc.nextInt();
sc.close();
// 처리
int day;
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
day = 31;
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
day = 30;
} else {
boolean is400 = year % 400 == 0;
boolean is4 = year % 4 == 0;
boolean is100 = year % 100 == 0;
if (is400 || is4 && !is100) {
day = 29;
} else {
day = 28;
}
}
// 결과
System.out.println(day + "일 까지입니다.");
}
}
if문의 단점
규칙이 없는 경우 조건식이 매우 길어진다
순차적으로 질의하므로 하단의 구문이 느리게 실행된다.
이러한 단점들을 보완할 수 있는 구문이 switch~case 구문
package condition2;
import java.lang.*;
public class Test01 {
public static void main(String[] args) {
int value = 10;
switch(value) {
case 5:
System.out.println("5");
break;
case 10:
System.out.println("10");
break;
default:
System.out.println("기타");
break;
}
}
}
- 정답
10
switch의 특징
break 키워드 사용 가능(안쓰면 끝날 때까지 실행)
package condition2;
import java.lang.*;
public class Test02 {
public static void main(String[] arms){
int month = 11;
switch(month) {//month의 값에 따라 특정 지점으로 이동시키도록 하겠다!
case 1: // month == 1인 경우 이동할 지점(책갈피)
System.out.println(31);
break;
case 2: // month == 2인 경우 이동할 지점(책갈피)
System.out.println(28);
break;
case 3:
System.out.println(31);
break;
case 4:
System.out.println(30);
break;
case 5:
System.out.println(31);
break;
case 6:
System.out.println(30);
break;
case 7:
System.out.println(31);
break;
case 8:
System.out.println(31);
break;
case 9:
System.out.println(30);
break;
case 10:
System.out.println(31);
break;
case 11:
System.out.println(30);
break;
case 12:
System.out.println(31);
break;
}
}
}
- 정답
30
case의 순서는 마음대로 조정 가능
package condition2;
import java.lang.*;
public class Test02_1 {
public static void main(String[] args) {
int month = 7;
switch(month) {//month의 값에 따라 특정 지점으로 이동시키도록 하겠다!
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
System.out.println(31);
break;
case 2://month == 2인 경우 이동할 지점(책갈피)
System.out.println(28);
break;
case 4: case 6: case 9: case 11:
System.out.println(30);
break;
}
}
}
- 정답
31
default는 case로 처리되지 않을 경우 실행(기본위치)
package condition2;
import java.lang.*;
public class Test02_2 {
public static void main(String[] args) {
int month = 7;
switch(month) {//month의 값에 따라 특정 지점으로 이동시키도록 하겠다!
case 2://month == 2인 경우 이동할 지점(책갈피)
System.out.println(28);
break;
case 4: case 6: case 9: case 11:
System.out.println(30);
break;
default:
System.out.println(31);
break;
}
}
}
- 정답
31
더 깔끔하게 표현하기
package condition2;
import java.lang.*;
public class Test02_3 {
public static void main(String[] args) {
int month = 7;
int day;
switch(month) {
case 2:
day = 28;
break;
case 4: case 6: case 9: case 11:
day = 30;
break;
default:
day = 31;
break;
}
System.out.println(day);
}
}
- 정답
31
조건 구문
상황에 따라 다른 내용이 실행될 수 있도록 만들어주는 구문
조건 구문의 종류
if 구문
- 논리를 기반으로 한 분기를 수행하는 구문
- 순차적으로 조건을 검사하여 결과 블록 1개를 실행
- 하단의 구문은 실행 속도가 다소 느리다(티 날 정도는 아니다)
- switch-case 구문
- 값을 기반으로 한 분기를 수행하는 구문
- 값은 byte, short, char, int, String 만 가능
- 한 번의 검사를 통해 특정 지점으로 이동하여 탈출 명령(break) 전까지 실행
- 모든 지점이 동일한 속도로 실행된다
for의 형태
for(선언문; 조건부; 증감부) {
코드
}
실행순서 : 선언부->조건부->코드->증감부->코드->증감부->...
for(int i = 1 ; i <= 5; i = i +1) {
System.out.println("Hello World");
}
Q. 1부터 10까지 1씩 증가하는 데이터
package loop;
import java.lang.*;
public class Test02 {
public static void main(String[] args) {
for (int i = 1; i <= 10; i += 1) {
System.out.println(i);
}
}
}
- 정답
1
2
3
4
5
6
7
8
9
10
Q : 사용자에게 숫자를 하나 입력받아서 해당하는 숫자의 구구단을 출력해보세요
package loop;
import java.lang.*;
import java.util.Scanner;
public class Test04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("숫자를 입력하세요");
int num = sc.nextInt();
sc.close();
for (int i = 1; i < 10; i++) {
System.out.println(num + " X " + i + " = " + (num * i));
}
}
}
- 정답
숫자를 입력하세요
3
3 X 1 = 3
3 X 2 = 6
3 X 3 = 9
3 X 4 = 12
3 X 5 = 15
3 X 6 = 18
3 X 7 = 21
3 X 8 = 24
3 X 9 = 27
Q. 1부터 100사이에 있는 "7의 배수"를 출력
package loop;
//import java.lang.*;
public class Test07 {
public static void main(String[] args) {
for (int i = 1; i <= 100; i++)
if (i % 7 == 0) {
System.out.println("7의 배수 = " + i);
}
}
}
- 정답
7의 배수 = 7
7의 배수 = 14
7의 배수 = 21
7의 배수 = 28
7의 배수 = 35
7의 배수 = 42
7의 배수 = 49
7의 배수 = 56
7의 배수 = 63
7의 배수 = 70
7의 배수 = 77
7의 배수 = 84
7의 배수 = 91
7의 배수 = 98
Q. 1부터 99사이에 있는 "5가 들어간 숫자"를 출력
규칙을 찾아본다
5 15 25 35 45 65 75 85 95 - 1의 자리가 5 ( i % 10 == 5 )
50 51 52 53 54 55 56 57 58 59 - 10의 자리가 5 ( i / 10 == 5 )
package loop;
//import java.lang.*;
public class Test08 {
public static void main(String[] args) {
for (int i = 1; i < 100; i++) {
boolean first = i / 10 == 5; // 10의 자리가 5;
boolean second = i % 10 == 5; // 1의 자리가 5;
if (first || second) {
System.out.println("i = " + i);
}
}
}
}
- 정답
i = 5 i = 15 i = 25 i = 35 i = 45 i = 50 i = 51 i = 52 i = 53 i = 54
i = 55 i = 56 i = 57
i = 58 i = 59 i = 65 i = 75 i = 85 i = 95
Q. 1부터 99사이에 있는 숫자를 이용하여 369게임을 실시한 결과를 출력
369게임은 숫자에 3, 6, 9가 있다면 해당 개수만큼 박수를 치는게임
시물레이션 결과를 예상하여 화면에 출력
3, 6, 9 가 한 개이면 짝 / 3, 6, 9 가 두 개이면 짝짝
조건을 찾아본다
10의 자리가 3, 6, 9
1의 자리가 3, 6, 9
package loop;
//import java.lang.*;
public class Test09 {
public static void main(String[] args) {
for (int i = 1; i < 100; i++) {
boolean first = i / 10 == 3 || i / 10 == 6 || i / 10 == 9; // 10의 자리가 3, 6, 9;
boolean second = i % 10 == 3 || i % 10 == 6 || i % 10 == 9; // 1의 자리가 3, 6, 9;
if (!(first || second)) { // 10의자리, 1의자리에도 없는경우
System.out.println(i);
} else if (first && second) { // 3 6 9 가 두 개 있다면
System.out.println("짝짝");
} else { // 3 6 9 가 한개 있다면
System.out.println("짝");
}
}
}
}
- 정답
1 2 짝 4 5 짝 7 8 짝 10 11 12 짝 14 15 짝 17 18 짝 20
21 22 짝 24 25 짝 27 28 짝 짝 짝 짝 짝짝 짝 짝 짝짝 짝 짝 짝짝 40
41 42 짝 44 45 짝 47 48 짝 50 51 52 짝 54 55 짝 57 58 짝 짝
짝 짝 짝짝 짝 짝 짝짝 짝 짝 짝짝 70 71 72 짝 74 75 짝 77 78 짝 80
81 82 짝 84 85 짝 87 88 짝 짝 짝 짝 짝짝 짝 짝 짝짝 짝 짝 짝짝
Q. 1부터 99사이에 있는 "5가 들어간 숫자"를 출력 하고 숫자 카운트, 합계도 출력
조건을 구해보자
10의 자리가 5
1의 자리가 5
package loop;
//import java.lang.*;
public class Test11 {
public static void main(String[] args) {
int total = 0;
int count = 0;
for (int i = 1; i < 100; i++) {
boolean first = i / 10 == 5; // 10의 자리가 5;
boolean second = i % 10 == 5; // 1의 자리가 5;
if (first || second) {
System.out.println("i = " + i);
count++;
total += i;
}
}
System.out.println("카운트 = " + count);
System.out.println("합계 = " + total);
}
}
- 정답
i = 5 i = 15 i = 25 i = 35 i = 45 i = 50 i = 51 i = 52 i = 53 i = 54 i = 55
i = 56 i = 57 i = 58 i = 59 i = 65 i = 75 i = 85 i = 95
카운트 = 19
합계 = 990
과제
Q. 몸짱이 되기 위해서 오늘부터 30일간 푸시업을 하려고 합니다
첫날은 힘드니까 10개만 하고, 둘째날부터는 전날보다 3개씩 더 하려고 합니다
(1) 30일간 매일마다 하게될 푸시업 개수를 계산하여 출력하시고
(2) 30일간 하게되는 총 푸시업 개수를 계산해서 출력하세요
package loop;
public class Test12 {
public static void main(String[] args) {
int day30 = 0;
int pushUp = 10;
for (int i = 1; i <= 30; i++) {
System.out.println(i + "일 = " + pushUp + "개");
day30 += pushUp;
pushUp += 3;
}
System.out.println("총 푸시업 개수 = " + day30 + "개");
}
}
- 정답
1일 = 10개
2일 = 13개
3일 = 16개
4일 = 19개
5일 = 22개
6일 = 25개
7일 = 28개
8일 = 31개
9일 = 34개
10일 = 37개
11일 = 40개
12일 = 43개
13일 = 46개
14일 = 49개
15일 = 52개
16일 = 55개
17일 = 58개
18일 = 61개
19일 = 64개
20일 = 67개
21일 = 70개
22일 = 73개
23일 = 76개
24일 = 79개
25일 = 82개
26일 = 85개
27일 = 88개
28일 = 91개
29일 = 94개
30일 = 97개
총 푸시업 개수 = 1605개
Q. 고대 그리스에 아주 현명한 노인이 살고 있었습니다
어느날 소문을 들은 왕이 노인을 찾아가서 이렇게 말했습니다
"가지고 싶은게 있다면 다 줄테니 어디 말해봐라~"
노인이 다음과 같이 말했습니다
"저는 많은건 필요없습니다. 첫째날 1원만 주시고 둘째날부터 전날의 두 배를 주실 수 있으십니까?"
(1) 만약 30일간 노인이 원하는 것을 왕이 해주려면 매일 얼마씩 줘야 하는지 계산해서 출력하세요
(2) 30일동안 노인이 받게되는 총 금액을 출력하세요
(3) 30일이 아니라 40일로 기간이 늘어나게 된다면 얼마를 받게되는지 출력하세요
package loop;
public class Test13 {
public static void main(String[] args) {
long day30 = 0;
long day40 = 0;
long money = 1;
for (int i = 1; i <= 30; i++) {
System.out.println(i + "일 = " + money + "원");
day30 += money;
money *= 2;
}
for (int i = 1; i <= 40; i++) {
day40 += money;
money *= 2;
}
System.out.println("");
System.out.println("30일 총 금액 = " + day30 + "원");
System.out.println("40일 총 금액 = " + day40 + "원");
}
}
- 정답
1일 = 1원
2일 = 2원
3일 = 4원
4일 = 8원
5일 = 16원
6일 = 32원
7일 = 64원
8일 = 128원
9일 = 256원
10일 = 512원
11일 = 1024원
12일 = 2048원
13일 = 4096원
14일 = 8192원
15일 = 16384원
16일 = 32768원
17일 = 65536원
18일 = 131072원
19일 = 262144원
20일 = 524288원
21일 = 1048576원
22일 = 2097152원
23일 = 4194304원
24일 = 8388608원
25일 = 16777216원
26일 = 33554432원
27일 = 67108864원
28일 = 134217728원
29일 = 268435456원
30일 = 536870912원
30일 총 금액 = 1073741823원
40일 총 금액 = -1073741824원
'Java 웹 개발' 카테고리의 다른 글
21.08.24 - 웹 개발 입문 10일차 (0) | 2021.08.24 |
---|---|
21.08.23 - 웹 개발 입문 9일차 (0) | 2021.08.23 |
21.08.19 - 웹 개발 입문 7일차 (0) | 2021.08.19 |
21.08.18 - 웹 개발 입문 6일차 (0) | 2021.08.18 |
21.08.17 - 웹 개발 입문 5일차 (0) | 2021.08.17 |