灯泡问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了灯泡问题相关的知识,希望对你有一定的参考价值。

假设需要制造一个带有四个按钮和两个灯泡的盒子并具有以下功能:

    ⑴ 有四个按钮输入,分别称为B1,B2,B3和B4;

    ⑵ 有两个灯泡作为输出,分别称为L1和L2;

    ⑶ B1是打开电源的按钮;

    ⑷ B4是关闭电源的按钮;

    ⑸ B2和B3 是操作按钮;

    ⑹ 在B1被按下后及B4被按下前,系统应称为电源打开状态;

    ⑺ 在B4被按下后及B1被按下前,系统应称为电源关闭状态;

    ⑻ 在电源关闭状态下,B2和B3按钮不起作用;

    ⑼ 在电源关闭状态下,灯应不亮;

    ⑽ 从最近一次电源打开状态算起,如果B2被按下的次数比B3被按下的次数多,L1亮,否则L2亮。

    ⑾ 任何时候都不能有一个以上的灯泡亮;

    ⑿ 如果其中的一个灯泡出现故障,另一个灯泡应以2秒钟的间隔闪烁,而不管B2和B3的操作过程。当B4按下时,闪烁停止;当B1被按下时,闪烁重新开始。当故障被排除后闪烁停止,系统恢复正常状态。

 

技术分享
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 
public class Box { 
     JFrame frame; 
     JButton button1,button2,button3,button4; 
     JLabel label1,label2; 
     JPanel panel1,panel2; 
     boolean off =false; 
     public static void main(String args[])
     { 
        Box box=new Box(); 
        box.go(); 
     } 
     void go(){ 
         frame=new JFrame("盒子"); 
         button1=new JButton("B1"); 
         button2=new JButton("B2"); 
         button3=new JButton("B3"); 
         button4=new JButton("B4"); 
         button1.setToolTipText("打开电源"); 
         button2.setToolTipText("L1灯亮"); 
         button3.setToolTipText("L2灯亮"); 
         button4.setToolTipText("关闭电源"); 
         label1=new JLabel(); 
         label1.setBorder(BorderFactory.createLineBorder(Color.white,60)); 
         label2=new JLabel(); 
         label2.setBorder(BorderFactory.createLineBorder(Color.white,60)); 
         JPanel panel1 =new JPanel(); 
         JPanel panel2 =new JPanel(); 
         panel1.add(label1,BorderLayout.WEST); 
         panel1.add(label2,BorderLayout.EAST); 
         panel2.add(button1); 
         panel2.add(button2); 
         panel2.add(button3); 
         panel2.add(button4); 
         Listener listener=new Listener(); 
         button1.addActionListener(listener); 
         button2.addActionListener(listener); 
         button3.addActionListener(listener); 
         button4.addActionListener(listener); 
         frame.add(panel1,BorderLayout.NORTH); 
         frame.add(panel2,BorderLayout.SOUTH);
         frame.setBackground(Color.BLACK); 
         frame.setSize(350,250); 
         frame.setDefaultCloseOperation(1); 
         frame.setVisible(true); 
         frame.setResizable(false); 
     } 
     class Listener implements ActionListener// 内部类,便于调用Box类中的成员变量on_off 
     { 
        public void actionPerformed(ActionEvent e) 
        { 
            String s=e.getActionCommand(); 
            if (s.equals("B1")) 
            { 
                off =true; 
            }
            if (off) { 
                if (s.equals("B2")) 
                { 
                    label1.setBorder(BorderFactory.createLineBorder(Color.yellow,60)); 
                    label2.setBorder(BorderFactory.createLineBorder(Color.white,60)); 
                    label1.setOpaque(true);
                    label2.setOpaque(true); 
                } 
                if (s.equals("B3")) 
                { 
                    label1.setBorder(BorderFactory.createLineBorder(Color.white,60)); 
                    label2.setBorder(BorderFactory.createLineBorder(Color.yellow,60)); 
                    label1.setOpaque(true); 
                    label2.setOpaque(true); 
                } 
                if (s.equals("B4")) 
                { 
                     label1.setBorder(BorderFactory.createLineBorder(Color.white,60)); 
                     label2.setBorder(BorderFactory.createLineBorder(Color.white,60)); 
                     label1.setOpaque(true); 
                     label2.setOpaque(true); 
                     off=false; 
                } 
            } 
            else 
            { 
                  label1.setBorder(BorderFactory.createLineBorder(Color.white,60)); 
                  label2.setBorder(BorderFactory.createLineBorder(Color.white,60)); 
                  label1.setOpaque(true); 
                  label2.setOpaque(true); 
               } 
            } 
     }
}
技术分享

以上是关于灯泡问题的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #612

设计模式 · 开关和灯泡的问题

100灯泡围圈通亮问题

poj 1957 二分搜索

灯泡问题

灯泡问题