Throttle 클래스
2025. 4. 17. 19:00ㆍ자료구조
코드 설명
/******************************************************************************
* Throttle 객체는 연료 흐름을 제어하는 스로틀을 시뮬레이션합니다.
******************************************************************************/
public class Throttle
{
private int top; // 스로틀의 최상위 위치
private int position; // 현재 스로틀 위치
/**
* 지정된 개수의 "작동 위치(on position)"를 가진 Throttle을 생성합니다.
* @param size
* 이 Throttle에 설정할 작동 위치의 개수
* @precondition
* size는 0보다 커야 합니다.
* @postcondition
* Throttle은 지정된 개수만큼의 작동 위치를 가지고 생성되며,
* 현재는 꺼진(닫힌) 상태입니다.
* @exception IllegalArgumentException
* size가 0 이하일 경우 예외가 발생합니다.
**/
public Throttle(int size)
{
if (size <= 0)
throw new IllegalArgumentException("Size <= 0: " + size);
top = size;
position = 0; // 현재 위치는 기본값인 0으로 설정됩니다.
}
/**
* 현재 Throttle의 연료 흐름 정도를 반환합니다.
* @param - 없음
* @return
* 현재 연료 흐름 비율 (0.0에서 1.0 사이의 값)
**/
public double getFlow( )
{
return (double)position / (double)top;
}
/**
* 현재 Throttle이 켜져 있는지 확인합니다.
* @param - 없음
* @return
* 흐름이 0보다 크면 true, 아니면 false를 반환합니다.
**/
public boolean isOn( )
{
return (position > 0);
}
/**
* Throttle의 위치를 위나 아래로 이동시킵니다.
* @param amount
* 이동할 양 (양수는 위로, 음수는 아래로 이동)
* @postcondition
* 위치가 지정된 양만큼 조정됩니다.
* 최상위 위치를 넘기면 최상위로 고정되며,
* 0보다 작아지면 0으로 고정됩니다.
**/
public void shift(int amount)
{
if (amount + position > top)
// 이동 결과가 최상위 위치를 넘을 경우
position = top;
else if (position + amount < 0)
// 이동 결과가 0보다 작아질 경우
position = 0;
else
// 정상 범위 내에서 위치 이동
position += amount;
}
/**
* Throttle을 끕니다.
* @param - 없음
* @postcondition
* Throttle의 위치가 0으로 설정되어 꺼진 상태가 됩니다.
**/
public void shutoff( )
{
position = 0;
}
}
- Throttle은 연료 흐름을 조절할 수 있는 가상의 스로틀 장치를 의미한다.
- 내부적으로 0~top까지의 위치 값으로 흐름을 표현한다.
private int top;
private int position;
- top: 스로틀이 가질 수 있는 최대 위치(연료의 최대 흐름? 유량인가?)
- position현제 스로틀의 위치(0이면 꺼진 상태, top 이면 완전 개방)
public Throttle(int size)
- 스로틀의 최대 위치 수를 설정하면서 객체를 생성한다.
- size가 0 이하이면 예외 처리.
- 기본적으로 위치는 0으로 설정되며, 꺼진 상태이다.
public double getFlow()
- 현제 위치에 따른 연료 흐름 비율을 반환한다.
- 만약 position이 0이면 흐름이 0.0
- 만약 position이 top이면 흐름이 1.0
- 만약 position이 top/2이면 흐름이 0.5
public boolean isOn()
- 스로틀의 흐름이 있는 지 확인한다.
- 만약 position>0 이면 true 반환
public void shift(int amount)
- 스로틀의 위치를 조절한다.
- 만약 범위를 벗어나면 자동으로 0 또는 top에 고정시킨다.
public void shutoff()
- 스로틀을 완전히 꺼서 position을 0으로 만든다.
코드 실행?
public class ThrottleTest {
public static void main(String[] args) {
Throttle t = new Throttle(10); // top = 10, position = 0
System.out.println("초기 상태:");
System.out.println("isOn: " + t.isOn()); // false
System.out.println("getFlow: " + t.getFlow()); // 0.0
t.shift(3); // 스로틀을 3단계 올림
System.out.println("\n3단계 올린 후:");
System.out.println("isOn: " + t.isOn()); // true
System.out.println("getFlow: " + t.getFlow()); // 0.3
t.shift(10); // 10단계 추가 이동 시도 (최대는 10이므로 초과 시 10에 고정)
System.out.println("\n10단계 추가 이동 시도 후:");
System.out.println("isOn: " + t.isOn()); // true
System.out.println("getFlow: " + t.getFlow()); // 1.0
t.shift(-5); // 5단계 내림
System.out.println("\n5단계 내린 후:");
System.out.println("isOn: " + t.isOn()); // true
System.out.println("getFlow: " + t.getFlow()); // 0.5
t.shutoff(); // 스로틀 끄기
System.out.println("\nshutoff() 호출 후:");
System.out.println("isOn: " + t.isOn()); // false
System.out.println("getFlow: " + t.getFlow()); // 0.0
}
}
//결과
초기 상태:
isOn: false
getFlow: 0.0
3단계 올린 후:
isOn: true
getFlow: 0.3
10단계 추가 이동 시도 후:
isOn: true
getFlow: 1.0
5단계 내린 후:
isOn: true
getFlow: 0.5
shutoff() 호출 후:
isOn: false
getFlow: 0.0'자료구조' 카테고리의 다른 글
| IntStack 클래스 (0) | 2025.04.19 |
|---|---|
| IntNode 클래스 (0) | 2025.04.19 |
| IntLinkedBag 클래스 (0) | 2025.04.18 |
| IntArrayBag 클래스 (0) | 2025.04.18 |
| Location 클래스 (1) | 2025.04.17 |