일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- DDL
- 기초 선택자
- 쿠버네티스
- mybatis
- dql
- 기본 API
- ORACLE 기초
- java
- docker 소개
- docker
- oracle
- view
- Flutter
- 필기
- SQL
- 웹개발 기초
- 정보처리기사
- 쿠버네티스 기본 개념
- 깃허브
- MVC 패턴
- DB 모델링
- github
- DB 개요
- VS Code
- DB
- java 기초
- 마크다운
- 프로그래밍 기초
- 데이터베이스
- 도커
- Today
- Total
핑구
02. 이것이 자바다 4장 확인 문제 본문
문제마다 클래스를 만들기 번거로워 문제를 각각의 메소드로 만든 후 main 메소드에서 호출하는 방식으로 풀이하였습니다.
package chap04;
import java.util.Scanner; //Exercise07
public class Exercise {
public static void main(String[] args) {
Exercise03();
Exercise04();
Exercise05();
Exercise06();
Exercise07();
}
// for문을 이용해 1부터 100까지의 정수 중 3의 배수의 총합 구하기
public static void Exercise03() {
int sum = 0;
for (int i = 1; i <= 100; i++) {
if (i % 3 == 0) {
sum += i;
}
}
System.out.println("Exercise03: " + sum);
}
// 두 개의 주사위를 던졌을 때 나오는 눈을 (눈1, 눈2) 형태로 출력하고, 눈의 합이 5인 경우 실행 멈추기
public static void Exercise04() {
int dice1 = 0; // 눈1
int dice2 = 0; // 눈2
System.out.println("Exercise04: ");
while (dice1 + dice2 != 5) {
dice1 = (int) (Math.random() * 6 + 1);
dice2 = (int) (Math.random() * 6 + 1);
System.out.println("(" + dice1 + ", " + dice2 + ")");
}
}
// 중첩 for문을 이용하여 방정식 4x + 5y = 60의 모든 해 구하기
public static void Exercise05() {
System.out.println("Exercise05: ");
for (int i = 0; i <= 10; i++) {
for (int j = 0; j <= 10; j++) {
if ((4 * i) + (5 * j) == 60) {
System.out.println("(" + i + ", " + j + ")");
}
}
}
}
// for문을 이용해 삼각형 출력
public static void Exercise06() {
System.out.println("Exercise06: ");
for (int i = 1; i <= 5; i++) {
for (int j = 0; j < i; j++) {
System.out.print("*");
}
System.out.println();
}
}
// 입력된 데이터로 예금, 출금, 조회, 종료 기능을 제공하는 코드 작성하기
public static void Exercise07() {
boolean run = true;
int balance = 0;
Scanner scanner = new Scanner(System.in);
System.out.println("Exercise07: ");
while (run) {
System.out.println("---------------------------------");
System.out.println("1. 예금 | 2. 출금 | 3. 잔고 | 4. 종료");
System.out.println("---------------------------------");
System.out.print("선택>");
int choice = scanner.nextInt();
int money;
switch (choice) {
case 1:
System.out.print("\n예금액>");
money = scanner.nextInt();
balance += money;
break;
case 2:
System.out.println("\n출금액>");
money = scanner.nextInt();
if (money > balance) {
System.out.println("출금할 금액이 충분하지 않습니다.");
} else {
balance -= money;
}
break;
case 3:
System.out.println("\n잔고>" + balance);
break;
case 4:
System.out.println("\n프로그램 종료");
run = false;
break;
}
}
}
}
결과
문제마다 하나씩 살펴보겠습니다.
Exercise 03
public static void Exercise03() {
int sum = 0;
for (int i = 1; i <= 100; i++) {
if (i % 3 == 0) {
sum += i;
}
}
System.out.println("Exercise03: " + sum);
}
Exercise 03은 for문을 이용하여 1부터 100까지의 숫자에서 3의 배수만 모두 더한 후 그 값을 출력하는 문제입니다.
먼저 3의 배수가 더해질 변수인 sum을 선언한 후, for문을 이용해 i를 1부터 100까지 반복합니다.
for문 내에 if문을 사용하여 i가 3의 배수인 경우에만 미리 선언해둔 sum에 i의 값을 더합니다.
%는 우변의 값으로 나눴을 때 생기는 나머지 값을 알 수 있는 연산자로, 'i % 3 == 0'은 i를 3으로 나눴을 때 0이 되는 경우를 뜻합니다. 이는 3의 배수를 의미하는 것입니다.
마지막으로 sum에 저장된 값을 출력하면 1부터 100까지의 숫자 중 3의 배수만 모두 더한 값이 출력됩니다.
Exercise 04
public static void Exercise04() {
int dice1 = 0; // 눈1
int dice2 = 0; // 눈2
System.out.println("Exercise04: ");
while (dice1 + dice2 != 5) {
dice1 = (int) (Math.random() * 6 + 1);
dice2 = (int) (Math.random() * 6 + 1);
System.out.println("(" + dice1 + ", " + dice2 + ")");
}
}
Exercise 04는 주사위 두 개를 두 주사위 눈의 합이 5가 될 때까지 굴리는 문제입니다.
while문은 조건식이 true인 경우에만 수행되기 때문에 두 주사위 눈의 합이 5가 아닌 경우(dice1 + dice2 != 5)로 조건식을 만들면 두 눈의 합이 5일 때 반복을 멈출 수 있습니다.
주사위를 굴리는 것은 Math.random() 메소드를 사용합니다.
이 메소드는 0.0과 1.0 사이에 있는 double 타입의 난수 하나를 리턴합니다. 따라서 해당 리턴 값에 원하는 숫자를 곱한 후 (주사위는 값이 6개이므로 6을 곱합니다.) 1을 더하면 원하는 범위의 난수를 얻을 수 있습니다.
주의할 점은 double 타입으로 리턴되기 때문에 int 타입으로 사용하여야 할 경우 형변환이 필요합니다.
마지막으로 두 눈의 값을 출력하는 코드까지 작성해 줍니다.
Exercise 05
public static void Exercise05() {
System.out.println("Exercise05: ");
for (int i = 0; i <= 10; i++) {
for (int j = 0; j <= 10; j++) {
if ((4 * i) + (5 * j) == 60) {
System.out.println("(" + i + ", " + j + ")");
}
}
}
}
Exercise 05는 중첩 for문을 이용하여 2차 방정식(4x + 5y = 60)의 해를 구하는 문제입니다.
i를 x로 보고, j를 y로 보는 중첩 for문을 작성합니다.
x와 y는 10 이하의 값이므로 0부터 10까지 반복합니다.
내부 for문 안에 if문을 작성하여 (4 * i) + (5 * j)가 60인 경우에만 i와 j 값을 출력합니다.
중첩 for문이므로 i가 0일 때 j는 0부터 10까지의 경우를 모두 수행합니다. 따라서 i가 0부터 10의 경우, j가 0부터 10의 경우를 모두 수행하므로 for문을 총 121번 수행하여 해를 찾습니다.
Exercise 06
public static void Exercise06() {
System.out.println("Exercise06: ");
for (int i = 1; i <= 5; i++) {
for (int j = 0; j < i; j++) {
System.out.print("*");
}
System.out.println();
}
}
Exercise 06은 다음과 같이 5단으로 별을 찍는 문제입니다.
*
**
***
****
*****
해당 문제 또한 중첩 for문을 이용합니다.
j를 사용하는 for문으로 별의 개수를 조절하고, i를 사용하는 for문으로 줄을 바꿉니다.
첫 줄에 별 하나, 두 번째 줄에 별 두 개 ... 형태로 별을 출력해야 하므로 j는 0부터 시작하며, 1부터 시작하는 i보다 작을 때까지 반복합니다.
한 줄에 별을 다 찍은 후에는 줄을 바꿔 줍니다.
i가 5가 될 때까지 반복하면 5단 별이 출력됩니다.
Exercise 07
import java.util.Scanner;
public static void Exercise07() {
boolean run = true;
int balance = 0;
Scanner scanner = new Scanner(System.in);
System.out.println("Exercise07: ");
while (run) {
System.out.println("---------------------------------");
System.out.println("1. 예금 | 2. 출금 | 3. 잔고 | 4. 종료");
System.out.println("---------------------------------");
System.out.print("선택>");
int choice = scanner.nextInt();
int money;
switch (choice) {
case 1:
System.out.print("\n예금액>");
money = scanner.nextInt();
balance += money;
break;
case 2:
System.out.println("\n출금액>");
money = scanner.nextInt();
if (money > balance) {
System.out.println("출금할 금액이 충분하지 않습니다.");
} else {
balance -= money;
}
break;
case 3:
System.out.println("\n잔고>" + balance);
break;
case 4:
System.out.println("\n프로그램 종료");
run = false;
break;
}
}
}
Exercise 07은 while문을 이용해 입금, 출금, 조회 프로그램을 작성하는 문제입니다.
입금할 돈과 출금할 돈을 입력받기 위해서는 Scanner 클래스를 사용해야 하며, Scanner 클래스를 사용하기 위해서는 제일 상단에 있는 'import java.util.Scanner;' 구문이 필요합니다. 해당 구문은 Scanner 클래스는 java.util 패키지 내에 있는데, 이것을 가져와서 사용한다는 의미입니다.
scanner.nextInt는 공백 전까지 입력된 정수를 읽어온다는 뜻이며, 여기에서는 메뉴 선택 시 1~4의 숫자를 사용하고, 금액 입력 시에도 숫자를 사용하기 때문에 정수를 읽어옵니다.
미리 선언된 balance 변수에 바로 scanner.nextInt를 사용하여 입력된 금액을 저장할 수 있으나, 따로 money 변수를 생성하여 저장한 이유는 출금액이 현재 예금되어 있는 금액보다 클 경우 오류 처리를 위함입니다.
오류 처리는 if문을 사용해 출금액으로 입력된 금액이 현재 예금되어 있는 금액보다 크다면 출금할 수 없게 하였습니다.
마이너스 통장이라면 해당 변수를 굳이 만들지 않아도 됩니다.
입금, 출금, 잔고 확인이 끝난 후 종료를 하는 경우에는 true로 선언된 run 변수의 값을 false로 만들어 주면 while문을 종료할 수 있습니다.
switch case문에 break를 사용하여도 해당 switch문만 종료되며, while문에는 영향을 주지 않습니다.
break를 사용하지 않는 경우 하위의 case문이 실행되기 때문에 사용해 주어야 합니다.
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
04. 중복되지 않는 난수 출력하기 (0) | 2021.08.18 |
---|---|
03. 이것이 자바다 5장 확인 문제 (0) | 2021.07.28 |
01. Hello, World (0) | 2021.07.26 |
00. Eclipse 설치하기 (0) | 2021.07.15 |
00. JAVA 설치하기 (0) | 2021.07.15 |