这段代码的目标是为我的主类
Coin
提供一个可锁定的界面,使用户输入key
来访问主代码。但是,我不知道如何以可锁定对象保护常规方法(setKey
、lock
和unlock
)的方式编写驱动程序类,并且当该对象被锁定时,无法调用这些方法如果它被解锁,则可以调用它。我尝试过驱动程序,但它不起作用。
package coins;
import java.util.Scanner;
public class Coins {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int guess;
System.out.println("Enter key: ");
guess = scan.nextInt();
Coin key = new Coin();
System.out.println(key);
final int flips = 1000;
int heads = 0, tails=0;
Coin myCoin = new Coin ();
for (int count =1; count <= flips; count++) {
myCoin.flip();
if (myCoin.isHeads())
heads++;
else
tails++;
}
System.out.println ("The number flips: " + flips);
System.out.println ("The number of heads: " + heads);
System.out.println ("The number of tails: " + tails);
}
}
币类
package coins;
class Coin implements Lockable {
private final int HEADS = 0;
private final int TAILS = 1;
private boolean locked;
private int key;
private int face;
public Coin () {
flip();
locked = false;
key = 123;
}
public void flip() {
face = (int) (Math.random()*2);
}
public boolean isHeads() {
return (face == HEADS);
}
public String toString() {
String faceName;
if (face == HEADS)
faceName = "Heads";
else
faceName = "Tails";
return faceName;
}
public boolean locked(){
return locked;
}
public void setKey(int key){
this.key = key;
}
public void unlock(int key){
if(this.key == key){
locked = false ;
}
}
public void lock(int key){
if(this.key == key){
locked = true;
}
}
public void messageReturn(){
if(locked == false)
System.out.println("unlocked") ;
}
}
可锁定界面
public interface Lockable {
public void setKey (int key);
public void lock (int key);
public void unlock (int key);
public boolean locked();
}
Itamar Green 所说的是真的。然而,对我来说,您描述的真正问题似乎是在您的
Coins
类中,而不是 Coin
类中。您实际上并没有使用用户输入的 guess
键执行任何操作。您需要使用该键在 setKey()
上调用 Coin
。然后,您的 Coin
将根据您的代码和 Itamar 的答案调用或不调用方法,首先检查它是否处于锁定状态。
首先,你应该通过以下方式检查猜测是否正确:(in
main
)
key.unlock(guess);//and you might want to set the default of locked to true, and remove the flip() in the constructor
需要在每个方法中添加一个检查:
public void flip()
{
if(!locked)
face = (int) (Math.random()*2);
}
与其他方法类似。
我要把所有这些代码放在哪里,有人可以帮我把它们加在一起吗,我不知道把这些代码放在哪里。