9일차 과제 피드백
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 + "개");
}
}
pushUp 위치 바뀌면 답이 다르게 나오니 주의해야한다.
package loop;
import java.util.Scanner;
public class Test13 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("날짜 입력");
int period = sc.nextInt();
sc.close();
long total = 0;
long money = 1;
for (int i = 1; i <= period; i++) {
System.out.println(i + "일 = " + money + "원");
total += money;
money *= 2;
}
System.out.println("");
System.out.println(period + "일 총 금액 = " + total + "원");
}
}
날짜를 직접 입력해서 출력할 수 있다.
- 정답
날짜 입력
10
1일 = 1원
2일 = 2원
3일 = 4원
4일 = 8원
5일 = 16원
6일 = 32원
7일 = 64원
8일 = 128원
9일 = 256원
10일 = 512원
10일 총 금액 = 1023원
Q. 요구사항
사용자에게 '분'과'초를 정수 형태로 입력받습니다
사용자가 입력한 시간부터 '0분 0초'가 될 때까지 1초씩 감소시켜가면서 화면에 메세지를 출력하세요
'0분 0초'가 되면 화면에 '시간이 다 되었습니다!' 라는 메세지를 함께 출력
package loop;
import java.util.Scanner;
public class Test14 {
public static void main(String[] args) throws Exception{
Scanner sc = new Scanner(System.in);
System.out.println("분을 입력하세요.");
int minute = sc.nextInt();
System.out.println("초를 입력하세요.");
int second = sc.nextInt();
sc.close();
int time = minute * 60 + second;
for (int i = time; i >= 0; i--) {
System.out.println(i/60 + "분" + i%60+ "초 " + "후 알람이 울립니다.");
Thread.sleep(1000L);
}
System.out.println("시간이 다 되었습니다!");
}
}
- 정답
분을 입력하세요.
0
초를 입력하세요.
10
0분10초 후 알람이 울립니다.
0분9초 후 알람이 울립니다.
0분8초 후 알람이 울립니다.
0분7초 후 알람이 울립니다.
0분6초 후 알람이 울립니다.
0분5초 후 알람이 울립니다.
0분4초 후 알람이 울립니다.
0분3초 후 알람이 울립니다.
0분2초 후 알람이 울립니다.
0분1초 후 알람이 울립니다.
0분0초 후 알람이 울립니다.
시간이 다 되었습니다!
Q. 사용자에게 숫자를 입력받아서 해당 숫자에 ?이 몇개 들어있는지 세어서 출력
ex 숫자 입력 : 12752137 , 5 -> 5가 1개 있습니다
package loop;
import java.util.Scanner;
public class Test15 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("숫자를 입력 하세요.");
int number = sc.nextInt();
System.out.println("숫자를 한개 입력 하세요.");
int select = sc.nextInt();
sc.close();
int count = 0;
for (int i = number; i > 0; i /= 10) {
int n = i % 10;
if (n == select) {
count++;
}
}
System.out.println("입력하신 숫자 [" + number + "] 에는 " + select + "이(가) " + count + "개 있습니다.");
}
}
- 정답
숫자를 입력 하세요.
12345678
숫자를 한개 입력 하세요.
5
입력하신 숫자 [12345678] 에는 5이(가) 1개 있습니다.
Q. 다음 요구사항에 맞게 소수찾기 프로그램을 구현
-입력
사용자에게 양수를 하나 입력받습니다
-처리
이 숫자가 소수인지 아닌지를 판정
(소수는 나누기가 불가능한 숫자를 말합니다(2, 3, 5, 7, 11, 13, ...))
-출력
소수인지 아닌지 판정하여 출력
package loop;
import java.util.Scanner;
public class Test16 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("양수를 하나 입력 하세요.");
int number = sc.nextInt();
sc.close();
int count = 0;
for (int i = 1; i <= number; i++) {
System.out.println(number + " % " + i + " = " + number % i);
if (number % i == 0)
count++;
}
System.out.println("count = " + count);
if (count == 2) {
System.out.println(number + "은 소수입니다");
} else {
System.out.println(number + "은 소수가 아닙니다 ");
}
}
}
- 정답
양수를 하나 입력 하세요.
5
5 % 1 = 0
5 % 2 = 1
5 % 3 = 2
5 % 4 = 1
5 % 5 = 0
count = 2
5은 소수입니다
while 반복
1부터 10까지 화면에 출력하는 코드 (같은 조건)
package loop2;
public class Test01 {
public static void main(String[] args) {
//for
for(int i = 1; i <= 10 ; i++) {
System.out.println(i);
}
//while
int n = 1;
while(n <= 10) {
System.out.println(n);
n++;
}
}
}
while 구문을 이용하면 "무한반복"이 가능하다(for도 가능하긴 하다)
무한 반복 시 반드시 "종료상황"을 알려줘야 한다.
Q. 0을 입력할 때까지 계속해서 숫자를 입력받는 프로그램 구현
package loop2;
import java.util.Scanner;
public class Test02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("숫자 입력");
int number = sc.nextInt();
if (number == 0) { // 0을 입력했다면
break; // 현재 진행중인 구문(if 빼고)을 탈출하세요!
}
}
sc.close();
}
}
- 정답
숫자 입력
3
숫자 입력
2
숫자 입력
0
종료
Q. 다음 요구사항에 맞는 프로그램을 while문을 이용하여 구현
사용자에게 숫자를 입력받는다
입력받은 숫자를 계속 더하여 100이 넘어가면 입력을 중지한다.
프로그램 종료시 화면에 Game over 라고 출력한다
package loop2;
import java.util.Scanner;
public class Test03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int total = 0;
int round = 1;
while (true) {
System.out.println("Round = " + round + " 숫자 입력");
int input = sc.nextInt();
total += input;
// System.out.println("input = " + input + ", total = " + total);
if (total > 100) {
break;
}
round++;
}
System.out.println(total + " , " + "Game over");
sc.close();
}
}
- 정답
Round = 1 숫자 입력
3
Round = 2 숫자 입력
10
Round = 3 숫자 입력
50
Round = 4 숫자 입력
30
Round = 5 숫자 입력
5
Round = 6 숫자 입력
10
108 , Game over
Q. 다음 요구사항에 맞는 프로그램을 while문을 이용하여 구현
사용자에게 숫자를 입력받는다
0을 입력하면 더이상 입력을 받지 않는다
입력이 종료되면 여태까지 입력한 숫자의 홀수, 짝수 개수를 구하여 출력
package loop2;
import java.util.Scanner;
public class Test04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int countOdd = 0; // 홀수
int countEven = 0; // 짝수
while (true) {
System.out.println("숫자 입력");
int number = sc.nextInt();
if (number == 0) {
break;
}
if (number % 2 == 0) {
countEven++;
} else {
countOdd++;
}
}
System.out.println("홀수는 총 " + countOdd + "번 입력되었습니다.");
System.out.println("짝수는 총 " + countEven + "번 입력되었습니다.");
System.out.println("홀수 = " + countOdd + "개, " + "짝수 = " + countEven + "개");
sc.close();
}
}
- 정답
숫자 입력
3
숫자 입력
4
숫자 입력
5
숫자 입력
4
숫자 입력
1
숫자 입력
0
홀수는 총 3번 입력되었습니다.
짝수는 총 2번 입력되었습니다.
홀수 = 3개, 짝수 = 2개
Q. 다음 요구사항에 맞는 프로그램을 while문을 이용하여 구현
구구단 게임
사용자에게 원하는 단수를 입력받는다
입력받은 단을 기준으로 x1 부터 순차적으로 문제를 출제
문제 출제후 사용자에게 정답을 입력받는다
정답이 아닌 경우 게임 오버 출력후 종료
(추가) 위의 프로그램을 개조하여 총 3번까지 틀리면 게임 오버 처리 되도록 구현
(추가) 게임 오버 시 총 맞춘 문제수 * 100점을 계산하여 점수 출력
(추가) 콤보 시스템 도입 1콤보당 100점씩 추가
package loop2;
import java.util.Scanner;
public class Test05 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("원하는 단수를 입력하세요 = ");
int number = sc.nextInt();
int total = 0; // 콤보+맞춘수 점수
int combo = 0; // 콤보
int sum = 0; // 맞춘수
int life = 3; // 목숨
int i = 1; // 1단부터
while (true) {
System.out.print(number + " X " + i + " = ");
int num = sc.nextInt();
if (number * i == num) {
i++;
sum++;
combo++;
System.out.println(combo + "콤보!");
total += combo * 100;
//maxCombo ++ ;
}
else {
System.out.println("땡!");
combo = 0;
life--;
System.out.println("남은 기회가 " + life + "번 있습니다");
if (life == 0) {
break;
}
}
}
sc.close();
System.out.println("Game over");
System.out.println("총 맞춘 문제수 " + sum + "개");
System.out.println("획득 점수 " + total + "점");
}
}
- 정답
원하는 단수를 입력하세요 = 3
3 X 1 = 3
1콤보!
3 X 2 = 6
2콤보!
3 X 3 = 9
3콤보!
3 X 4 = 0
땡!
남은 기회가 2번 있습니다
3 X 4 = 2
땡!
남은 기회가 1번 있습니다
3 X 4 = 12
1콤보!
3 X 5 = 0
땡!
남은 기회가 0번 있습니다
Game over
총 맞춘 문제수 4개
획득 점수 700점
do~while 반복 - 잘안쓰는타입
선 실행(do) 후 반복(while)을 수행하는 구문
같은 구문에서 변수가 공유가 되지 않음
중괄호와 세미콜론을 동시에 사용하는 등 문법적으로 요구사항이 많음
ex : 사용자에게 점수(1~100점)를 입력받는 코드 구현. 잘못 입력하면 다시 입력하도록 처리
package loop3;
import java.util.Scanner;
public class Test01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);;
int score;
do {
//점수를 입력받는 코드
System.out.println("점수 입력");
score = sc.nextInt();
}
while(!(score >=0 && score <= 100));//점수를 다시 입력받는 조건 : 점수를 잘못 입력하면(0이상 100이하가 아니라면 / 0미만 또는 100초과)
sc.close();
}
}
- 정답
점수 입력
900
점수 입력
-700
점수 입력
10
Q. 위 조건을 while문으로 구현할 수 있다.
package loop3;
import java.util.Scanner;
public class Test02 {
public static void main(String[] args) {
// ex : 사용자에게 점수(1~100점)를 입력받는 코드 구현. 잘못 입력하면 다시 입력하도록 처리
Scanner sc = new Scanner(System.in);
int score;
while (true) {
System.out.println("점수 입력");
score = sc.nextInt();
if (score >= 0 && score <= 100) {// 점수를 다시 입력받는 조건 : 점수를 잘못 입력하면(0이상 100이하가 아니라면 / 0미만 또는 100초과)
break;
}
}
sc.close();
}
}
반복문을 중첩해야 하는 경우
가장 안쪽(작은 반복)부터 구현하는 것이 좋다
(5번씩 3번)
package loop4;
public class Test02 {
public static void main(String[] args) {
for(int i = 0; i<3; i++) { //3번짜리 반복(i)
for(int j = 0; j<5; j++) { //5번짜리 반복(j)
System.out.println("Hello Wolrd!");
}
}
}
}
10일차 과제
Q. 369게임 문제와 숫자에서 7개수세기 문제를 참고해서 아래 요구사항에 맞게 문제를 푸세요.
1부터 1000까지 369게임을 하면 치게되는 박수 횟수를 계산하여 출력
사용자에게 시작구간과 종료구간을 입력받아서 해당 구간에서의 박수 횟수를 계산하여 출력
package loop4;
import java.util.Scanner;
public class Test03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("시작 구간을 입력하세요 = ");
int go = sc.nextInt();
System.out.print("종료 구간을 입력하세요 = ");
int stop = sc.nextInt();
sc.close();
int clap = 0;
for (int i = go; i <= stop; i++) {
for (int j = i; j > 0; j /= 10) {
if (j % 10 == 3 || j % 10 == 6 || j % 10 == 9) {
clap++;
}
}
}
System.out.println(go + "에서 " + stop + "까지");
System.out.println("박수친 횟수 = " + clap + "번");
}
}
- 정답
시작 구간을 입력하세요 = 100
종료 구간을 입력하세요 = 300
100에서 300까지
박수친 횟수 = 121번
'Java 웹 개발' 카테고리의 다른 글
| 21.08.25 - 웹 개발 입문 11일차 (0) | 2021.08.25 |
|---|---|
| 21.08.24 - 웹 개발 입문 10일차 (0) | 2021.08.24 |
| 21.08.20 - 웹 개발 입문 8일차 (0) | 2021.08.20 |
| 21.08.19 - 웹 개발 입문 7일차 (0) | 2021.08.19 |
| 21.08.18 - 웹 개발 입문 6일차 (0) | 2021.08.18 |