我是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();
}
}
答案 0 :(得分:1)
您的代码有点令人困惑。我可以看到你最大的问题是不必要的操作。例如:
position = (position + ticks);
有点冗长。你可以说:
position += ticks;
你有多个攻击,所以你应该很快清理你的代码。你的if语句也很冗长。从逻辑上考虑它们,你会经常发现一些检查是不必要的。
if(position - ticks > 0)
是一个很好的例子。做一点算术,你会发现:
position - ticks > 0
position > ticks
比以前更具可读性。我认为你应该清理你的代码和操作员,然后发布一个新的问题。现在我很难理解这里发生的一些逻辑。 还有代码审查,错误的地方兄弟。