2016-12-17 9 views
0

Цель этого кода - иметь заблокированный интерфейс для моего основного класса, Coin, который заставляет пользователя вводить key для доступа к основному коду. Однако я не знаю, как написать класс драйвера таким образом, чтобы заблокированный объект защищал обычные методы (setKey, lock и unlock), и когда этот объект заблокирован, методы не могут быть вызваны, если они разблокированы, это может вызывается. Я попробовал драйвер, но он не работает.Как написать драйвер для java относительно блокируемого интерфейса?

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") ; 
    } 
    } 

Lockable Интерфейс

public interface Lockable { 
    public void setKey (int key); 
    public void lock (int key); 
    public void unlock (int key); 
    public boolean locked(); 
} 
+0

Вы сделали это прямо сейчас. Я не вижу проблемы – ItamarG3

+0

Всякий раз, когда я ввожу число, он по-прежнему запускает мой код, когда ключ ошибочен. Когда я вхожу в правый ключ, он не печатает сообщение. – Philana

ответ

0

Во-первых, вы должны проверить, если догадка верна с помощью: (в main)

key.unlock(guess);//and you might want to set the default of locked to true, and remove the flip() in the constructor 

Вам нужно добавить чек i n каждый метод:

public void flip() 
{ 
    if(!locked) 
     face = (int) (Math.random()*2); 
} 

аналогичным образом с другими методами.

+0

Я удалил flip(), и я смущен, если я добавлю key.unlock (угадать) в основной код или конструктор. – Philana

+0

в основном коде – ItamarG3

+0

После добавления его к основному коду он по-прежнему не имеет ограничений – Philana

0

Что говорит Итамар Грин - это правда. Однако мне кажется, что настоящая проблема, которую вы описываете, находится в вашем классе Coins, а не в классе Coin. Вы фактически ничего не делаете с ключом guess, который вводит пользователь. Вам нужно позвонить setKey() по Coin с помощью этого ключа. Затем ваш Coin будет вызывать или не вызывать методы в соответствии с вашим кодом и ответом Itamar, сначала проверяя, находится ли он в заблокированном состоянии.

+0

Могу ли я попытаться сделать переменную static, чтобы я мог достичь ее среди классов и сравнить их в основном коде? – Philana

+0

Я думаю, что может быть ОК, если вы хотите иметь один ключ для всех своих монет. Но если вы хотите иметь другой ключ на монету, тогда статический ключ будет неправильным подходом. – entpnerd

+0

Я хотел бы иметь только один ключ, но по какой-то причине я не могу сделать переменную static! Он продолжает давать мне ошибки – Philana