import java.io.*;
public class GentCPT3
{
public static void main (String[] args) throws IOException
{
BufferedReader objReader = new BufferedReader(new InputStreamReader (System.in));
System.out.println("Enter key");
int key1 = Integer.parseInt(objReader.readLine()); // set to 111
System.out.println("Enter key2");
int key2 = Integer.parseInt(objReader.readLine()); // set to 222
Lock lock1 = new Lock (key1);
Lock lock2 = new Lock (key2);
System.out.println(lock1.isOpen()); // prints false
lock1.close();
lock2.close();
lock1.open(111); // opens lock1
lock2.open(222); // opens lock2111
lock1.open(123); // fails to open
lock1.open(456); // fails to open
lock1.open(789); // fails - prints “Alarm”
}
}
class Lock //Initializing class
{
//Initializing variables
boolean isOpen;
int key;
int numAttempts = 0;
Lock(int key)
{
isOpen = false;
this.key = key;
}
public void close()//for incorrect combo
{
isOpen = false;
}
public void open(int key)//for correct combo
{
if(this.key == key)
{
isOpen = true;
}
else if(this.key != key && !isOpen)
{
numAttempts++;
}
if(numAttempts == 3)
{
System.out.println("ALARM");//prints alarm when the combo is incorrect **enter code here**3 times
}
}
}
我需要帮助修复标题中提到的错误。还有一些我需要帮助的其他调试事情。如果您认为可以修复代码,请随意编辑代码。我需要帮助将锁上每个组合的尝试次数设置为 3,因为目前它设置为 2,我不知道为什么
最佳答案
问题是,一旦成功打开锁,您就无法关闭它们。将您的调用更改为:-
lock1.close();
lock2.close();
lock1.open(111); // opens lock1
lock2.open(222); // opens lock2111
lock1.close(); // NEW ADDITION
lock2.close(); // NEW ADDITION
lock1.open(123); // fails to open
lock1.open(456); // fails to open
lock1.open(789); // fails - prints “Alarm”
要进一步改进代码,请在 this.key == key
时重置 open()
中的 numAttempts = 0
。并删除 this.key != key
,因为由于之前的 if
条件,它始终为 true
。
关于 java 。 Lock 类型的 isOpen() 方法未定义。还需要一些帮助修复一些代码/调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53421830/