문제 내용
본 내용은 학교 교재 " [쉽게 배우는 자바 프로그래밍] 4장 8번 "의 내용을 기반을 다루고 있습니다
문제 정의
- Dice 클래스에는 6개의 면(face)이라는 속성과 굴리기(roll)라는 동작이 있다.
- Math.random() 메서드는 0.0 이상 1.0 미만의 double 타입의 무작위 실수를 반환한다.
- 주사위를 나타내는 Dice 클래스를 작성하고, 다음 코드를 사용해 테스트하시오.
주어지는 코드
public class DiceTest {
public static void main(String[] args) {
Dice d = new Dice();
System.out.println("주사위의 숫자 : " + d.roll());
}
}
문제 풀이
class Dice {
private double face;
public Dice() {
this.face=face;
}
public int roll() {
this.face = ((Math.random() * 10 % 6) +1);
return (int)face;
}
}
public class DiceTest {
public static void main(String[] args) {
Dice d = new Dice();
System.out.println("주사위의 숫자 : " + d.roll());
}
}
- 단순히 roll() 메서드를 통해 1~6자리 숫자를 돌려주었습니다.
- 그리고, DiceTest를 통해 주사위 숫자를 랜덤으로 입력받도록 해주었습니다...
변형
- 현재는 Dice 하나만을 다루고 있다.
- 하지만, 만약 myDice가 5개고 yourDice가 5개 일때를 다루도록 하자. 주사위 숫자를 모두 개별 출력해야한다면...?
- myDice의 합계와 yourDice의 합계를 각각 출력해보자.
- 마지막에 그럼 모든 주사위의 합계도 출력해보자.
해결 과정
Dice 한 개 정의
public class Dice {
private double face;
public Dice() {
this.face = face;
}
public double getFace() {
return this.face;
}
public int roll() {
this.face = ((Math.random() * 10 % 6) +1);
return (int)face;
}
}
- Dice 객체는 이전 예제와 똑같이 랜덤한 수를 가지기 위해 하나의 face 변수를 가집니다.
- 이 때, Dice 객체는 roll() 메서드를 통해 무작위로 주사위를 1~6까지 굴릴 수 있습니다.
Dice 들을 실행
package org.example.tensix;
import java.util.ArrayList;
import java.util.List;
class Dices {
List<Dice> dices;
int sum = 0;
static int allSum = 0;
public Dices() {
this.dices = new ArrayList<>();
}
public void addDice(Dice dice) {
sum += dice.getFace();
allSum += dice.getFace();
this.dices.add(dice);
}
public int getSum() {
return sum;
}
public int getAllSum() {
return allSum;
}
}
- 생성한 Dice들을 집합적으로 관리하기 위한 객체인 List<Dice>형태의 Dices 객체를 두었습니다.
- 해당 Dices 객체 내의 각 객체별로의 합의 데이터는 sum 변수로 관리합니다.
- 만들어진 Dices 객체 내의 모든 Dice 객체들의 합의 데이터는 별도로 저장하기 위해 allSum 정적 변수로 관리하도록 했습니다.
- 정적 변수에 대한 설명은 아래 링크를 참고해주시길 바랍니다.
Dice 실행
class DiceDemo {
public static void main(String[] args) {
Dices myDices = new Dices();
StringBuilder sb = new StringBuilder();
for(int i=0; i<5; i++) {
Dice myDice = new Dice();
myDice.roll();
sb.append("myDic들의 " + (i+1) + " 번째 주사위 숫자 : " + myDice.getFace() + "\n");
myDices.addDice(myDice);
}
sb.append("myDice들의 총 합계 : " + myDices.getSum() + "\n").append("\n");
Dices yourDices = new Dices();
for(int i=0; i<5; i++) {
Dice yourDice = new Dice();
yourDice.roll();
sb.append("yourDice의 " + (i+1) + " 번째 주사위 숫자 : " + yourDice.getFace() + "\n");
yourDices.addDice(yourDice);
}
sb.append("yourDice의 총 합계 : " + yourDices.getSum() + "\n");
sb.append("모든 Dice들의 합계 : " + yourDices.getAllSum());
System.out.println(sb);
}
- 각(myDice, yourDice) Dice들의 합 데이터는 Dices 내의 sum에 저장이 되어 있습니다.
- myDice와 yourDice의 합 데이터는 Dices 내의 allSum에 저장이 되어 있습니다.
결과
느낀 점
문제를 제 인사이트에서 최대한으로 짜내서 변형해보았지만, 스스로의 성장에 있어 너무 뎌디다고 생각합니다.
계속 지웠다 썼다하며 문제를 만드는 데만 3시간이 걸렸습니다.. 하지만 푸는데는 20분이 걸렸습니다....
이는 곧.. 제가 현재 가진 시야에서 풀기 쉬운방향으로 잡혔던 것 같습니다. 이 때문에 현재 시야에 고립될까 두려움이 느껴졌습니다..
오히려 3시간동안 데이터 인사이트를 확장시키고자 한 것이 제 한계점을 분명하게 드러내주었던 계기였다고 생각합니다.
전체 코드
package org.example.tensix;
import java.util.ArrayList;
import java.util.List;
class Dices {
List<Dice> dices;
int sum = 0;
static int allSum = 0;
public Dices() {
this.dices = new ArrayList<>();
}
public void addDice(Dice dice) {
sum += dice.getFace();
allSum += dice.getFace();
this.dices.add(dice);
}
public int getSum() {
return sum;
}
public int getAllSum() {
return allSum;
}
}
public class Dice {
private double face;
public Dice() {
this.face = face;
}
public double getFace() {
return this.face;
}
public int roll() {
this.face = ((Math.random() * 10 % 6) +1);
return (int)face;
}
}
class DiceDemo {
public static void main(String[] args) {
Dices myDices = new Dices();
StringBuilder sb = new StringBuilder();
for(int i=0; i<5; i++) {
Dice myDice = new Dice();
myDice.roll();
sb.append("myDic들의 " + (i+1) + " 번째 주사위 숫자 : " + myDice.getFace() + "\n");
myDices.addDice(myDice);
}
sb.append("myDice들의 총 합계 : " + myDices.getSum() + "\n").append("\n");
Dices yourDices = new Dices();
for(int i=0; i<5; i++) {
Dice yourDice = new Dice();
yourDice.roll();
sb.append("yourDice의 " + (i+1) + " 번째 주사위 숫자 : " + yourDice.getFace() + "\n");
yourDices.addDice(yourDice);
}
sb.append("yourDice의 총 합계 : " + yourDices.getSum() + "\n");
sb.append("모든 Dice들의 합계 : " + yourDices.getAllSum());
System.out.println(sb);
}
}
Reference
[쉽게 배우는 자바 프로그래밍] 4장 8번
'학교 수업' 카테고리의 다른 글
[학교 수업] 객체 지향 (0) | 2023.10.01 |
---|