我自己和目前正在Java课程中的3-4名学生正在开展一个项目,我们都没有就如何做一个具体的部分达成一致。
上下文是这部分的说明:
您还必须提供以下方法:
public boolean checkDoorPermissions(int doorNumber)
行为:此方法将采用0到7之间的整数表示8个门中的一个。如果此卡的所有者(此对象)应打开编号为doorNumber的门,则返回true。否则该方法应返回false。
我们对如何处理权限存在争议。我已经建议了一个数组列表,因为之后可能更容易在方法中访问它。其他人建议提出8 boolean
个权限,或8个int
s(例如private int doorNumber8;
)。
非常感谢任何帮助/指导。
答案 0 :(得分:1)
我不打算提供代码,因为这似乎是一项任务,但您可以创建一个Door
类,其中有String name
,int id
和{{1 }}
然后,创建8个boolean permission
并将它们存储在一个数组中。
这是让你入门的东西:
Door
答案 1 :(得分:0)
由于只有八个门,并且权限为“是”或“否”,您可以简单地创建一个八位字符串,1
表示权限。然后你可以定义
DOOR0 = 1;
DOOR1 = 2;
DOOR2 = 4;
DOOR3 = 8;
等。 - 并且用户的许可类似于
userPermission = DOOR1 + DOOR4 + DOOR7;
然后使用
测试用户的权限if(userPermission & DOOR5) {
// permission granted
}
问题中的数字8只是BEGS使用一个字节来存储数据......
如果您需要能够测试可变门号doorNum
,那么您的测试将成为
if(userPermission & (1 << doorNum) {
将数字1
移到适当的位置(注意 - 我只是重新阅读了问题并意识到你的门编号为base0;我相应地编辑了答案。)
答案 2 :(得分:0)
正如你在课堂上发现的那样,这个问题会征求各种答案。就个人而言,我认为最明显的是使用包含无障碍门的ID的java.util.Set
。
这将导致:
public boolean checkDoorPermissions(int doorNumber)
{
return accessibleDoorNumbers.contains(doorNumber);
}
这很简单,允许实现checkDoorPermissions
方法的类用于不同数量的门。
答案 3 :(得分:0)
我将定义一个具有八个可能值的Door枚举:DOOR1,DOOR2等。 然后每个人都有一个&#34;集合&#34;其中包含0到8个枚举值。 (我说集合而不是ArrayList ......看看EnumSet类。)
尽量不要太聪明。使用位掩码等最初可能看起来非常令人印象深刻。但是你的代码会让人感到困惑和不可读,特别是对于一项学术任务。 记住软件开发的第一步:保持简单!
答案 4 :(得分:-1)
定义枚举更具可读性:
public Enum Doors {
DOOR1
,DOOR2
,DOOR3
,DOOR4
,DOOR5
,DOOR6
,DOOR7
,DOOR8
}
但是,您可以使用简单的字节数组和屏蔽操作进行管理:
byte[] doors = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};
然后,为了检查设置了哪些权限,您可以执行以下操作:
(byte) b & doors[i]; // 1 = 0...7