[英]Java code structuring for school project
我本人和Java班的3-4名学生正在研究一个项目,我们谁也没有同意做特定部分的方式。
对于上下文,这是此部分的方向:
您还必须使以下方法可用:
public boolean checkDoorPermissions(int doorNumber)
行为:此方法将采用0到7之间的整数,表示8门。 如果此卡的所有者(此对象)应打开编号为doorNumber的门,则它将返回true。 否则,该方法应返回false。
我们在如何获得许可方面存在分歧。 我建议使用数组列表,因为以后可能更容易在方法中访问它。 其他人建议设置8个boolean
权限或8个int
(例如private int doorNumber8;
)。
任何帮助/方向,我们将不胜感激。
我不会给出代码,因为这似乎是一种分配,但是您可以创建一个Door
类,其中包含String name
, int id
和boolean permission
。
然后,创建8 Door
并将它们存储在数组中。
以下是一些入门知识:
class Door {
boolean permission;
String name;
int id;
public Door(boolean permission, String name, int id) {
//initialize your variables here!
}
}
由于只有八扇门,并且权限为“是”或“否”,因此您可以简单地制作一个八位字符串,其中1
表示权限。 然后您可以定义
DOOR0 = 1;
DOOR1 = 2;
DOOR2 = 4;
DOOR3 = 8;
等等-用户的许可将类似于
userPermission = DOOR1 + DOOR4 + DOOR7;
然后您使用以下命令测试用户的权限
if(userPermission & DOOR5) {
// permission granted
}
问题中的数字8只是开始使用字节来存储数据...
而且,如果您需要能够测试可变门号doorNum
,则测试将变为
if(userPermission & (1 << doorNum) {
这会将数字1
移到适当的位置(请注意-我只是重新阅读了问题,并意识到您的门编号为base0;因此我相应地编辑了答案)。
正如您在课堂上发现的那样,该问题将征求各种答案。 我个人认为,最简单的方法是使用包含可访问门的ID的java.util.Set
。
这将导致:
public boolean checkDoorPermissions(int doorNumber)
{
return accessibleDoorNumbers.contains(doorNumber);
}
它很简单,并且允许实现checkDoorPermissions
方法的类与不同数量的门一起使用。
我将定义一个带有八个可能值的Door枚举:DOOR1,DOOR2等。然后每个人都会有一个“集合”,其中包含零到八个这些枚举值。 (我说的是集合而不是ArrayList ...请看EnumSet类)。
尽量不要太聪明。 最初使用位掩码等可能看起来非常令人印象深刻。 但是您的代码会令人困惑且难以理解,尤其是对于学术任务而言。 记住软件开发的规则之一:保持简单!
定义一个枚举将更具可读性:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.