Java组合锁

时间:2013-09-10 00:18:19

标签: java

我是java编程新手,希望对我的编码有所了解,是否有任何方法可以使其更清晰或更好。或者,如果有更好的方法来解决这个问题。

实现一个名为CombinationLock的类,用于模拟锁。 你的锁有40个位置,0-39。组合具有该范围内的3个数字,如果按顺序向右,向左,向右转动,则打开锁。

// MIchael Thompson
public class Lock 
{
  private boolean nutural = true; 
  private boolean flag1, flag2, flag3;
  private int one, two, three;
  private boolean unlock = true; 
  private int position = 0; 

  public Lock (int one, int two, int three)
  {
    this.one = one;
    this.two = two;
    this.three = three;
  }
  public void turnRight (int ticks) // turns the dial right the given number of ticks
  {
    if (nutural)
    {
      position = (40 - ticks);
      flag1 = false;
      nutural = false;
      if (position == one)
      {
        flag1 = true;
       // System.out.println(position);
      }
    }
    else
    {
      if (position - ticks > 0 )
      {
        position = position - ticks; 
        // System.out.println(position);
        flag3 = false; 
        if (position == three)
        {
          flag3 = true; 
        }
      }
      else 
      {
        position = (40 - (ticks - position));
        flag3 = false;
        //  System.out.println(position);
        if (position == three )
        {
          flag3 = true;
        }
      }
    }
  }
  public void turnLeft (int ticks) // turns the dial left the given number of ticks
  {
    if (position + ticks < 40 )
    {
      position = (position + ticks);
      // System.out.println(position);
      flag2 = false;
      if (position == two )
      {
        flag2 = true;
      }
    }
    else
    {
      position = ( (position + ticks) - 40 );
      // System.out.println(position);
      flag2 = false;  
      if (position == two) 
      {
        flag2 = true; 
      }
    }
  }
  public void reset ()// which sets the dial to 0
  {
    nutural = true; 
    flag1 = false;
    flag2 = false;
    flag3 = false; 
  }
  public void open ()
  {
    if (!(flag1 && flag2 && flag3))
    {
      unlock = false;
      System.out.println("Wrong combination!!"); 
    }
    else
    {
    System.out.println("Lock is open!!");
    }
  }
  public static void main(String[] args)
  {
    Lock lock = new Lock(35, 12, 37);
    lock.turnRight(5);
    lock.turnLeft(17);
    lock.turnRight(15);
    lock.open();
  }
}

1 个答案:

答案 0 :(得分:1)

您的代码有点令人困惑。我可以看到你最大的问题是不必要的操作。例如:

position = (position + ticks);

有点冗长。你可以说:

position += ticks;

你有多个攻击,所以你应该很快清理你的代码。你的if语句也很冗长。从逻辑上考虑它们,你会经常发现一些检查是不必要的。

if(position - ticks > 0)

是一个很好的例子。做一点算术,你会发现:

position - ticks > 0
position > ticks

比以前更具可读性。我认为你应该清理你的代码和操作员,然后发布一个新的问题。现在我很难理解这里发生的一些逻辑。 还有代码审查,错误的地方兄弟。