学校项目的Java代码结构

时间:2013-02-06 13:39:25

标签: java

我自己和目前正在Java课程中的3-4名学生正在开展一个项目,我们都没有就如何做一个具体的部分达成一致。

上下文是这部分的说明:

  • 卡片ID应为整数
  • 应为文字的名称
  • 一组8个权限,这8个权限中的每一个都代表一个门。这可以存储为布尔值,整数或任何你喜欢的内容。
  • 您还必须提供以下方法:

      

    public boolean checkDoorPermissions(int doorNumber)

         

    行为:此方法将采用0到7之间的整数表示8个门中的一个。如果此卡的所有者(此对象)应打开编号为doorNumber的门,则返回true。否则该方法应返回false。

我们对如何处理权限存在争议。我已经建议了一个数组列表,因为之后可能更容易在方法中访问它。其他人建议提出8 boolean个权限,或8个int s(例如private int doorNumber8;)。

非常感谢任何帮助/指导。

5 个答案:

答案 0 :(得分:1)

我不打算提供代码,因为这似乎是一项任务,但您可以创建一个Door类,其中有String nameint 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