0

私自身と現在の Java クラスの 3 人から 4 人の生徒がプロジェクトに取り組んでいますが、特定の部分を行う方法について誰も同意していません。

コンテキストについては、この部分の指示を次に示します。

  • 整数である必要があるカード ID
  • テキストであるべき名前
  • 8 つの権限のセットで、これら 8 つの権限のそれぞれが 1 つのドアを表します。これは、ブール値、整数、または好きなものとして保存できます。
  • また、次のメソッドを使用可能にする必要があります。

    public boolean checkDoorPermissions(int doorNumber)

    動作: このメソッドは、8 つのドアの 1 つを表す 0 から 7 までの整数を取ります。このカードの所有者 (このオブジェクト) が doorNumber の番号が付いたドアを開く必要がある場合は true を返します。それ以外の場合、メソッドは false を返す必要があります。

私たちは、アクセス許可をどうするかについて意見が分かれています。後でメソッドでアクセスする方が簡単かもしれないので、配列リストを提案しました。他の人は、8 つのbooleanパーミッション、または 8int秒 (例: private int doorNumber8;) を作成することを提案しています。

どんな助け/指示も大歓迎です。

4

5 に答える 5

1

これは割り当てのように見えるため、コードは提供しませんが、、、、およびが含まれるクラスを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!
    }
}
于 2013-02-06T13:44:59.937 に答える
0

ドアは8つしかなく、許可は「はい」または「いいえ」のいずれかであるため、1許可を表す8ビットの文字列を簡単に作成できます。次に、次のように定義できます

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であることに気付きました。それに応じて回答を編集しました)。

于 2013-02-06T13:46:20.267 に答える
0

DOOR1、DOOR2などの8つの可能な値でドア列挙型を定義します。各人は、それらの列挙型値の0から8を含む「コレクション」を持ちます。(私はArrayListではなくコレクションと言います... EnumSetクラスを見てください)。

賢くなりすぎないようにしてください。ビットマスクなどの使用は、最初は非常に印象的かもしれません。ただし、コードは混乱を招き、特に学術的なタスクでは判読できなくなります。ソフトウェア開発のルール1を忘れないでください:それをシンプルに保つ!

于 2013-02-06T13:58:01.103 に答える
0

クラスで見つけたように、この質問はさまざまな回答を求めます。java.util.Set個人的には、アクセス可能なドアの ID を含むを使用するのが最も明確だと思います。

これにより、次のようになります。

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 に答える