티스토리 뷰

물 한컵당 1~10사이의 랜덤의 물이 있다.

사람은 3명이 존재하며 당연히도 각기 다른 객체로써 존재한다.

사람 3명에게 각각 물 10컵씩을 지급한다.  물 또한 각기 다른 객체로써 존재한다

힌트 : 사람(3) x 물컵(10) = 총 물 30컵이 필요할것이다.

사람 3명에게 물을 각각 10컵을 지급을 완료했다면 물의 총량이 가장 많은 사람이 승리하게 된다.

다시 한번 객체지향의 의미를 파악하며 코드를 짜보자.

 

 

정답 공개 ! 

package hihihi;

import java.util.Random;
import java.util.Scanner;

//물 클래스
class Water{
	Random r = new Random();
	int num;
	Water(){
		num = r.nextInt(10)+1;
	}
}

//물을 받는 사람 클래스
class Humanget{
	Water[] w;
	int result = 0;
	public void TotalWater() {
		for(int i=0;i<w.length;i++) {
			w[i] = new Water();
			result += w[i].num;
		}
	}
	
}



public class protect {
	public static void main(String[] args) {
		
		
		Water[][] w = new Water[3][10];
		
		for(int i=0;i<w.length;i++) {
			for(int j=0;j<w[i].length;j++) {
				w[i][j] = new Water(); //물 3 x 10 객체 생성
			}
		}
	
		
		Humanget[] h = new Humanget[3];
		
		for(int i=0;i<h.length;i++) {
			h[i] = new Humanget(); //사람 3 객체 생성
			h[i].w = w[i];
			h[i].TotalWater();
		}
		
		int[] array = new int[3];
		array[0] = h[0].result;
		array[1] = h[1].result;
		array[2] = h[2].result;
		
		int max = array[0];
		int j = 0;
		for(int i=0;i<array.length;i++) {
			if(max < array[i]) {
				max = array[i];
				j = i;
			}
		}
		
		System.out.println((j+1) + "번째 사람이 " + max +" 값으로 승리하였습니다.");
		
		System.out.println("----------최종 결과 발표------------");

		System.out.println("1번 사람 : " + array[0]);
		System.out.println("2번 사람 : " + array[1]);
		System.out.println("3번 사람 : " + array[2]);
		
	}
}

내가 지금 올리고있는 자바의 문제들은 전부 학원 강사님께서 내주신 문제들이다. 

이 문제 또한 학원에서 푼 기억이 있는데 다시 풀려고 하니 뭔가 헷갈렸다. 잘 한 것인지는 모르겠으나 기존의 했던 방식이 기억이 안나 그냥 내 식대로 해결해보았다.

 

1.각각 물 클래스와 사람 클래스를 만들어주었다.

2. 물 클래스에서는 num이라는 변수에 1~10사이의 임의의 값을 넣어주었다.

3. 사람 클래스가 여기서는 핵심인데 사람 클래스에서는 물 10컵을 받아야 하므로 물 클래스를 배열 형태로 받아주었다.

4. 배열의 크기만큼 객체를 생성해주었고 물 배열의 값들을 result 변수에 전부 누적하여서 사람이 가지고 있는 물의 총양을 알아낼수있게 하였다.

5. 메인에서도 중요한데 물객체를 [3][10] 생성해주었고 사람객체는 [3]명을 생성해주었다.

6. 사람객체 한명당 물 10컵씩을 넣어주었다

ex) 첫번째 사람 = 물[0] / 두번째 사람 = 물[1] / 세번째 사람 = 물[2]

7. 그리고 사람객체가 가지고 있는 물들의 누적값을 메소드를 이용하여 계산하였다.

8. 5,6,7번은 같은 for문안에서 동시에 이루어지게끔 하였다.

9. 그 후에는 int[] array에 1~3번 사람의 물을 순서대로 넣어주었고 최대값과 최대값이 있는 위치의 인덱스를 추출하여

10. 결과를 출력해주면 끝 ! 

 

 

 

감사합니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
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
글 보관함