日期:2014-05-20  浏览次数:20839 次

如何用JAVA实现这个盒子?
假设需要制造一个带有四个按钮和两个灯泡的盒子并且有以下功能:
  (1)有四个按钮输入,分别称为B1,B2,B3,B4;
  (2)有两个灯泡作为输出,分别称为L1和L2;
  (3)B1是打开电源的按钮;
  (4)B4是关闭电源的按钮;
  (5)B2和B3是操作按钮;
  (6)在B1被按下后及B4被按下前,系统应称为电源打开状态;
  (7)在B4被按下后及B1被按下前,系统应称为电源关闭状态;
  (8)在电源关闭状态下,B2和B3按钮不起作用;
  (9)在电源关闭状态下,灯应不亮;
  (10)从最近一次电源打开状态算起,如果B2被按下的次数比B3被按下的次数多,L1亮,否则L2亮;
  (11)任何时候都不能有一个以上的灯泡亮;
  (12)如果其中的一个灯泡出现故障,另一个灯泡应以2秒钟的间隔闪烁,而不管B2和B3的操作过程。当B4按下时,闪烁停止;当B1被按下是,闪烁重新开始。当故障别排除后闪烁停止,
  系恢复正常状态;

  小弟初学JAVA,请问用JAVA如何实现这个程序?希望大家可以帮帮我,谢谢大家了!

------解决方案--------------------
Java code

//保存为TestBox.java
//测试类
public class TestBox{
    public static void main(String[] args){
        Box box = new Box();
        
        box.b1(); //打开电源
        box.b2();//按b2 (对应L1)
        box.b3(); //按b3 (对应L2)
        box.b3();  //按b3 (对应L2)
        box.showL1L2Status();
        box.brokenLight1(); //砸烂L1
        box.showL1L2Status();//显示2个灯的状态
        box.b4(); //关灯
        box.showL1L2Status(); //显示2个灯的状态
        box.b1(); //再开灯
        box.showL1L2Status(); //显示2个灯的状态
        box.repairLight(); //关灯,修理灯
        box.showL1L2Status(); //显示2个灯的状态
        box.b1(); //修理后重新打开电源
        box.b2(); 
        box.showL1L2Status();
        
    }
}
//盒子类
class Box {
    private boolean power = false;//电源
    private Light l1 = new Light();//电灯一
    private Light l2 = new Light();//电灯二
   public void b1(){ //开打电源
       power = true;
       l1.setCount(0); //每次重开电源,重新计算L1,L2被按的次数
       l2.setCount(0);
   }
   public void b2(){  //按b2按钮,对应L1
       if( !power){ //如果电源没开,不响应,
           return;
       }
       else{
           this.l1.AddCount();
           //System.out.println("l2:" + l1.getCount());
           if( !checkBroken()){ //只有灯没坏时才响应
               int light1Count = l1.getCount();
               int light2Count = l2.getCount();
               if( light1Count > light2Count){
                    l1.setStatus("light");
                    l2.setStatus("unlight");
               }
               else {if ( light2Count > light1Count){
                   l2.setStatus("light");
                   l2.setStatus("unlight");
               }
               else {
                   l1.setStatus("unlight");
                   l2.setStatus("unlight");
               }}
           }//if(!checkBroken)
           else{  //灯坏了,就不响应
               if( l1.getStatus().equals("broken")){
                   l2.setStatus("glimpse");
               }
               else{
                   l1.setStatus("glimpse");
               }
           }// checkBroken else 
       }
   } 
   public void b3(){ //参照b2的注释
       if( !power){ 
           return;
       }
       else{
           this.l2.AddCount();
           //System.out.println("l2:" + l2.getCount());
           if( !checkBroken()){
               int light1Count = l1.getCount();
               int light2Count = l2.getCount();
               if( light1Count > light2Count){
                    l1.setStatus("light");
                    l2.setStatus("unlight");
               }
               else{ if ( light2Count > light1Count){
                   l2.setStatus("light");
                   l1.setStatus("unlight");
               }
               else {
                   l1.setStatus("unlight");
                   l2.setStatus("unlight");
               } }
           }//if(!checkBroken)
           else{
               if( l1.getStatus().equals("broken")){
                   l2.setStatus("glimpse");
               }
               else{
                   l1.setStatus("glimpse");
               }
           }// checkBroken else 
       }
   }
   public void b4(){ //关电源
       power = false;
       //没坏的话,就设置灯为关闭状态,否则保持原来的状态
       if ( (!this.l1.getStatus().equals("broken")) 
               &&(!this.l2.getStatus().equals("broken"))){
           l1.setStatus("unlight");
           l2.setStatus("unlight");
       }
   }  
   //关灯,并将坏的灯泡休息好
    public void repairLight(){
        System.out.println("操作:关电灯,修理");
        b4();
        l1.setStatus("unlight");
        l2.setStatus("unlight");
    }
    //将L1砸烂
    public void brokenLight1(){
        l1.setStatus("broken");
        l2.setStatus("glimpse");        
    }
    //将L2砸烂
    public void brokenLight2(){
        l2.setStatus("broken");
        l1.setStatus("glimpse");        
    }
    //显示目前灯的状态
    public void showL1L2Status(){
        if(power){
       System.out.println("L1的状态:" + l1.getStatus());
       System.out.println("L2的状态:" + l2.getStatus());
        }
        else{
            System.out.println("L1的状态:unlight");
            System.out.println("L2的状态:unlight");
        }
    }
    //检查是否有灯坏了,有的话返回true,否则返回false
    public boolean checkBroken(){
        boolean flag = false;
        if( l1.getStatus().equals("broken") || l2.getStatus().equals("broken")){
            flag = true;
        }
        return flag;
    }
    
}
//灯泡类
class Light{
    private String status = "unlight";//状态,从unlight light glimpse broken中选一个
    private int count = 0;
    //被按下按钮的次数+1
    public void AddCount(){
        this.count++;
    }
    //取得被按下的次数
    public int getCount(){
        return this.count;
    }
    //设置被按下的次数
    public void setCount(int count){
        this.count = count;
    }
    //取得灯泡的状态
    public String getStatus(){
        return this.status;
    }
    //设置灯泡的状态
    public void setStatus(String status){
        this.status = status;
    }

}