일부러 팀원에게 class를 설명하기 위해 기능들을 하드하게 쪼갰다.
다음 코드는 싱글턴 패턴을 사용해서 이 코드를 수정하겠다.
import java.util.Scanner;
//[LED 선풍기]
//색상변경, 타이머설정 , 회전각도 설정 , 풍속조절(함수로 1단부터 4단), 전원 기능 구현
class Fan_set
{
boolean fan_power = false;//선풍기 전원 기본값 false로 설정
int dan = 1;
static int ang = 90;
int tim = 0;
}
class LED//선풍기 LED색상 선택
{
String led = "빨강";
LED(){}//기본 생성자
LED(String led)//생성자
{
this.led = led;
}
}
class Power//켜고 끄기
{
Boolean fan_power(String ans)//파라미터 ans을 main()으로부터 받아온다.
{
if(ans.equals("Y")||ans.equals("y"))//ans가 y라면
{
System.out.println("선풍기를 킬게요\n");
return true;
}
else if(ans.equals("N")||ans.equals("n"))//ans가 n라면
{
System.out.println("선풍기를 끌게요\n");
return false;
}
else //디폴트값 false
{
return false;
}
}
}
class Timer// 타이머설정
{
void timer(int time)//파라미터 time을 main()으로부터 받아온다.
{
System.out.println(time+"분으로 설정되었습니다.");
}
}
class Turn_a//회전각도 설정
{
Scanner ac = new Scanner(System.in);//스캐너 클래스 사용
void angle()//파라미터 ang을 main()으로부터 받아온다.
{
while(true)//무한반복
{
int ang = ac.nextInt();//사용자에게 ang값을 받는다.
if(0<=ang&&ang<=180)//ang이 0도에서 180사이면
{
System.out.println(ang+"도로 설정합니다.");
Fan_set.ang = ang;
break;//while문 종료
}
else//ang이 0도에서 180사이가 아니라면
{
System.out.println("범위를 잘못 설정하였습니다. 재 입력 해주세요.");
}
}
}
}
class Fan_s//풍속조절(함수로 1단부터 4단)
{
void speed(int speed)//파라미터 speed를 main()으로부터 받아온다.
{
String[] dan_set = {"1단으로 변경합니다.","2단으로 변경합니다.","3단으로 변경합니다.","4단으로 변경합니다."};//배열 dan_set에 결과값 문자열 설정
switch(speed)//speed를 조건으로 판단
{
case 1:
System.out.println(dan_set[0]);
break;
case 2:
System.out.println(dan_set[1]);
break;
case 3:
System.out.println(dan_set[2]);
break;
case 4:
System.out.println(dan_set[3]);
break;
}
}
}
public class fan
{
public static void main(String[] args)//main() static이 있어서 여기서부터 실행
{
int set_ch;//선풍기 설정 선택
Fan_set fan_s = new Fan_set();//선풍기 정보를 담은 클래스
LED le = new LED();
Power po = new Power();//[전원기능] Power클래스 선언 (참조변수 po)
Timer ti = new Timer();//[타이머 기능] Timer클래스 선언 (참조변수 ti)
Turn_a ta = new Turn_a();//[회전각도 기능]Turn_a클래스 선언 (참조변수 ta)
Fan_s fs = new Fan_s();//[풍속조절 기능] Fan_s클래스 선언 (참조변수 fs)
Scanner sc = new Scanner(System.in);//문자열용 스캐너 선언
Scanner ac = new Scanner(System.in);//정수용 스캐너 선언
System.out.println("[LED 선풍기]");
System.out.printf("선풍기를 켜시겠습니까? (Y/N) : ");
String ans = sc.nextLine();//사용자에게 Y/N 둘중하나 입력받아서 ans에 값을 넣는다
System.out.println();
if(ans.equals("Y")||ans.equals("y"))//ans값이 y이면 실행
{
po.fan_power(ans);//Power클래스 안의 fan_power함수를 호출할 때, ans를 넘겨준다.
while(true)
{
System.out.println("<선풍기 상태>");
System.out.printf("LED색상 : %s색, 풍속 : %d단, 회전각도 : %d도, 타이머 : %d분\n\n",le.led, fan_s.dan, fan_s.ang, fan_s.tim);
System.out.println("선풍기 기능을 설정합니다.");
System.out.println("1.LED 색상변경 2.풍속설정 3.회전각도 4.타이머 설정 5.선풍기 끄기");
set_ch = ac.nextInt();//사용자에게 받은 값을 set_ch에 저장 적도록 한다.
if(set_ch == 1)
{
System.out.printf("LED 색상을 선택해주세요. (기본색상은 빨간색입니다.) : ");
String led = sc.nextLine();//사용자에게 색상을 적도록 한다.
if(led.length()<1)//적은 값이 없다(디폴트)면
{
le = new LED();//[LED색상 변경] LED 클래스 선언 (참조변수 le) / 기본생성자에 접근
System.out.println(le.led+"색으로 선택되었습니다.");
}
else//색상을 적은게 있다면
{
le = new LED(led);//[LED색상 변경] LED 클래스 선언 (참조변수 le) / 생성자에 접근
System.out.println(le.led+"색으로 선택되었습니다.");
}
System.out.println();
}
else if(set_ch == 2)
{
System.out.printf("몇단으로 설정 하시겠습니까? (1, 2, 3, 4) : ");
fan_s.dan = ac.nextInt();//사용자에게 받은값을 dan에 저장
fs.speed(fan_s.dan);//Fan_s클래스 안의 speed함수를 호출할 때, dan을 넘겨준다.
System.out.println();
}
else if(set_ch == 3)
{
System.out.println("각도를 얼마로 설정하시겠습니까? (단, 0도 이하, 180이상은 불가능합니다.)");
ta.angle();//Turn_a클래스 안의 angle함수를 호출할 때, ang을 넘겨준다.
System.out.println();
}
else if(set_ch == 4)
{
System.out.printf("설정할 시간을 입력하세요. : ");
fan_s.tim = ac.nextInt();//사용자에게 받은값을 tim에 저장
ti.timer(fan_s.tim);//Timer클래스 안의 timer함수를 호출할 때, tim을 넘겨준다.
System.out.println();
}
else if(set_ch == 5)
{
System.out.println("선풍기 설정을 종료합니다.");
break;//while문 빠져나감
}
else
{
System.out.println("잘못 입력하였습니다. 다시 입력해주세요\n");
}
}
}
/*====================================================================================*/
else if(ans.equals("N")||ans.equals("n")) //ans을 n으로 설정
{
po.fan_power(ans);
System.out.println("선풍기를 종료합니다.");
}
else
{
System.out.println("잘못 입력하셨습니다,선풍기를 종료합니다");
}
}
}
실행결과는 다음과 같다.
[LED 선풍기]
선풍기를 켜시겠습니까? (Y/N) : y
선풍기를 킬게요
<선풍기 상태>
LED색상 : 빨강색, 풍속 : 1단, 회전각도 : 90도, 타이머 : 0분
선풍기 기능을 설정합니다.
1.LED 색상변경 2.풍속설정 3.회전각도 4.타이머 설정 5.선풍기 끄기
1
LED 색상을 선택해주세요. (기본색상은 빨간색입니다.) :
빨강색으로 선택되었습니다.
<선풍기 상태>
LED색상 : 빨강색, 풍속 : 1단, 회전각도 : 90도, 타이머 : 0분
선풍기 기능을 설정합니다.
1.LED 색상변경 2.풍속설정 3.회전각도 4.타이머 설정 5.선풍기 끄기
1
LED 색상을 선택해주세요. (기본색상은 빨간색입니다.) : 파랑
파랑색으로 선택되었습니다.
<선풍기 상태>
LED색상 : 파랑색, 풍속 : 1단, 회전각도 : 90도, 타이머 : 0분
선풍기 기능을 설정합니다.
1.LED 색상변경 2.풍속설정 3.회전각도 4.타이머 설정 5.선풍기 끄기
5
선풍기 설정을 종료합니다.
'Java > Codes' 카테고리의 다른 글
선풍기 (스레드) (0) | 2022.03.24 |
---|---|
선풍기 (싱글턴) (0) | 2022.03.23 |
함수를 사용하여 사칙연산 계산기 만들기 (0) | 2022.03.14 |
2022 대선 투표 프로그램 (0) | 2022.03.14 |
함수를 이용한 구구단 제작 (0) | 2022.03.14 |