0

我自己和我的 Java 班目前的 3-4 名学生正在做一个项目,但我们都没有就完成特定部分的方式达成一致。

对于上下文,这是这部分的说明:

  • 应为整数的卡 ID
  • 应该是文本的名称
  • 一组 8 个权限,这 8 个权限中的每一个将代表一扇门。这可以存储为布尔值、整数或您喜欢的任何内容。
  • 您还必须使以下方法可用:

    public boolean checkDoorPermissions(int doorNumber)

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

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

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

4

5 回答 5

1

我不会给出代码,因为这看起来像是一个作业,但你可以创建一个Door包含String nameint id和的类boolean permission

然后,创建 8 Doors 并将它们存储在一个数组中。

这里有一些东西可以帮助你开始:

class Door {
    boolean permission;
    String name;
    int id;
    public Door(boolean permission, String name, int id) {
        //initialize your variables here!
    }
}
于 2013-02-06T13:44:59.937 回答
0

我将定义一个具有八个可能值的 Door 枚举:DOOR1、DOOR2 等。然后每个人都会有一个“集合”,其中包含这些枚举值中的零到八个。(我说的是集合而不是 ArrayList……看看 EnumSet 类)。

尽量不要太聪明。使用位掩码等可能最初看起来非常令人印象深刻。但是你的代码会令人困惑和不可读,尤其是对于学术任务。记住软件开发的规则之一:保持简单!

于 2013-02-06T13:58:01.103 回答
0

Since there are only eight doors, and the permission is either "yes" or "no", you can simply make an eight bit character string, with 1 representing permission. You could then define

DOOR0 = 1;
DOOR1 = 2;
DOOR2 = 4;
DOOR3 = 8;

etc. - and a user's permission would be something like

userPermission = DOOR1 + DOOR4 + DOOR7;

Then you test a user's permission with

if(userPermission & DOOR5) {
  // permission granted
}

The number 8 in the question just BEGS the use of a byte for storing the data...

And if you need to be able to test to a variable door number doorNum, your test becomes

if(userPermission & (1 << doorNum) {

which will shift the number 1 to the appropriate location (note - I just re-read the question and realized your doors are numbered base0; I edited the answer accordingly).

于 2013-02-06T13:46:20.267 回答
0

正如您在课堂上发现的那样,这个问题将征求各种答案。就我个人而言,我认为最清晰的方法是使用java.util.Set包含可访问门的 id 的 a。

这将导致:

public boolean checkDoorPermissions(int doorNumber)
{
  return accessibleDoorNumbers.contains(doorNumber);
}

它很简单,并且允许实现该checkDoorPermissions方法的类与不同数量的门一起使用。

于 2013-02-06T13:49:11.243 回答
-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
于 2013-02-06T13:48:48.790 回答