繁体   English   中英

学校项目的Java代码结构

[英]Java code structuring for school project

我本人和Java班的3-4名学生正在研究一个项目,我们谁也没有同意做特定部分的方式。

对于上下文,这是此部分的方向:

  • 卡号应为整数
  • 名称应为文字
  • 一组8个权限,这8个权限中的每个权限都代表一个门。 可以将其存储为布尔值,整数或任何您喜欢的值。
  • 您还必须使以下方法可用:

    public boolean checkDoorPermissions(int doorNumber)

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

我们在如何获得许可方面存在分歧。 我建议使用数组列表,因为以后可能更容易在方法中访问它。 其他人建议设置8个boolean权限或8个int (例如private int doorNumber8; )。

任何帮助/方向,我们将不胜感激。

我不会给出代码,因为这似乎是一种分配,但是您可以创建一个Door类,其中包含String nameint idboolean 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM