📅  最后修改于: 2023-12-03 15:28:36.995000             🧑  作者: Mango
这是GATE CS 1996年的问题24,它考查的是面向对象的程序设计。问题描述如下:
你要设计一个门类(Gate
),表示进入一座建筑物的门。该门类包含两个状态:打开(open
)和关闭(closed
)。门的状态可通过方法setOpen
和setClosed
进行改变,该方法要求使用密钥(key
)进行验证。另外,门类还包含一个isOpen
方法,它用来检查门是否处于打开状态。
请根据上述问题描述完成以下任务:
Gate
)的构造函数和三个方法(setOpen
,setClosed
和isOpen
);Key
);下面是解决该问题的代码实现。
首先,我们需要设计一个门类(Gate
)。
public class Gate {
private boolean open;
public Gate() {
this.open = false;
}
public void setOpen(Key key) {
if (key.isValid()) {
this.open = true;
} else {
System.out.println("Invalid key");
}
}
public void setClosed() {
this.open = false;
}
public boolean isOpen() {
return this.open;
}
}
上述代码实现了要求的构造函数和三个方法:setOpen
,setClosed
和isOpen
。其中,setOpen
方法中添加了对密钥的验证,如果密钥有效,就将门的状态改为打开;否则,输出"Invalid key"。
接下来,我们需要设计一个密钥类(Key
)。
public class Key {
private boolean valid;
public Key(boolean valid) {
this.valid = valid;
}
public boolean isValid() {
return this.valid;
}
}
密钥类只需要一个布尔变量valid
来表示密钥是否有效。它只有一个构造函数,并提供了一个方法isValid
,用于检查密钥是否有效。
最后,我们需要设计一个测试程序来测试门类和密钥类的实现。
public class TestGate {
public static void main(String[] args) {
// create a gate and a key
Gate gate = new Gate();
Key key = new Key(true);
// test methods
System.out.println("Initial gate status: " + gate.isOpen()); // false
gate.setOpen(key);
System.out.println("Gate status after opening: " + gate.isOpen()); // true
gate.setClosed();
System.out.println("Gate status after closing: " + gate.isOpen()); // false
Key invalidKey = new Key(false);
gate.setOpen(invalidKey); // output "Invalid key"
}
}
该测试程序创建了一个门和一把钥匙,并测试了门类的三个方法和密钥类的isValid
方法的正确性。在测试setOpen
方法时,我们通过创建一把无效的钥匙来测试门类的密钥验证功能。