Eine Methode um zu testen ob es ein Nachbar gibt?

Hallo, ich muss bei meiner Aufgabe die Klasse Field um eine Methode boolean hasNeighbor(int, int, int) erweitern, sodass die ersten Parameter x- und y-Koordinaten sind und der dritte Parameter die Richtung. Die Methode soll zurückgeben ob es an der übergebenen Stelle, in die Richtung eine Verbindung zum Nachbarn gibt. Aber das schwierige ist, dass es ohne Schleife oder Verzweigung aus der erstellten getNeighborhood Methode mit Bitoperationen bestimmt werden muss. Ich hoffe jemand kann mir helfen, da ich noch ein Anfänger bin.

class Field
{
    /**
     * Die Dateinamen der Bodengitterelemente, die direkt mit einer
     * Rotation 0 verwendet werden können. Der Index ergibt sich
     * aus der Summe der folgenden Zahlen:
     * 1: In Richtung 0 (+1, 0) gibt es eine Verbindung.
     * 2: In Richtung 1 (0, +1) gibt es eine Verbindung.
     * 4: In Richtung 2 (-1, 0) gibt es eine Verbindung.
     * 8: In Richtung 3 (0, -1) gibt es eine Verbindung.
     */
    private static final String[] NEIGHBORHOOD_TO_FILENAME = {
        "grass",
        "path-e-0",
        "path-e-1",
        "path-l-0",
        "path-e-2",
        "path-i-0",
        "path-l-1",
        "path-t-1",
        "path-e-3",
        "path-l-3",
        "path-i-1",
        "path-t-0",
        "path-l-2",
        "path-t-3",
        "path-t-2",
        "path-x"
    };


    /**
     * Die Feldbeschreibung. Jede zweite Spalte und Zeile enthält die
     * eigentlichen Zellen. Dazwischen sind die Nachbarschaften
     * vermerkt.
     */
    private final String[] field;


    Field(final String[] field)
    {
        this.field = field;


        for (int y = 0; y < field.length; y += 2) {
            for (int x = 0; x < field[y].length(); x += 2) {
                new GameObject(x / 2, y / 2, 0, NEIGHBORHOOD_TO_FILENAME[getNeighborhood(x, y)]);
            }
        }
    }

    private char getCell(final int x, final int y)
    {
        if (x >= 0 && y >= 0 && y < field.length && x < field[y].length()) {
            return field[y].charAt(x);
        }
        else {
            return ' ';
        }
    }


private int getNeighborhood(final int x, final int y)
    {
        // Die (x, y)-Versätze für die einzelnen Prüfrichtungen
        final int[][] neighbors = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};

        int neighborhood = 0;

        int bit = 1;

        for (final int[] offsets : neighbors) {
            if (getCell(x + offsets[0], y + offsets[1]) != ' ') {
                neighborhood += bit;
            }
            bit *= 2;
        }
        return neighborhood;
    }

    static void test()
    {
        new GameObject.Canvas(5, 5, 96, 96);
        new Field(new String[] {
            "O-O-O-O  ",
            "|   |    ",
            "O O-O-O O",
            "| | | | |",
            "O-O-O-O-O",
            "| | | | |",
            "O O-O-O O",
            "    |   |",
            "O-O-O-O-O"
        });
    }
}
Java, Array, Programmiersprache
Schematron Regeln programmieren?

Hallo liebe Community,

ich bin ein absoluter Newbie in Sachen Schematron und XML/XSLT Programmierung und bräuchte einen Rat. Ich habe eine Liste an Aufgaben erhalten und soll diese in Schematron umsetzen. Hier mal die Aufgaben:

Regel 1: Der Dateiname in related-atricle muss immer mit der Endung ".pdf" enden.

Regel 2: Die Elemente volume und issue dürfen ausschließlich Zahlen enthalten.

Regel 3: Die letzte Seite muss größer als die erste Seite sein. < und >

Fangen wir mit Regel 2 an. Hierfür habe ich folgenden Code geschrieben:

 <pattern id="volume">
    <rule context="volume">
      <assert test="matches(volume, '^[0-9]$')"> Das Element "volume" darf ausschließlich
        Zahlen enthalten. </assert>
    </rule>
  </pattern>

  <pattern id="issue">
    <rule context="issue">
      <assert test="matches(issue, '^[0-9]$')"> Das Element "issue" darf ausschließlich Zahlen
        enthalten. </assert>
    </rule>
  </pattern>

Die XML-Datei spuckt mir hier aus meine "Nachricht" aus, obwohl die Elemente Issue und Volume beide bereits nur Zahlen enthalten. Was ist falsch?

Regel 3: Ich dachte das wäre relativ einfach und habe folgenden Code geschrieben

 <pattern id="pages">
    <rule context="fpage">
      <assert test=". &lt; lpage" id="lower-than-lpage"> Die letzte Seite muss größer als die
        erste Seite sein. </assert>
      <assert test="fpage &gt; ." id="greater-than-fpage"> Die letzte Seite muss größer als
        die erste Seite sein. </assert>
    </rule>
  </pattern>  

Auch hier zeigt es mir meine Nachricht in der XML an, obwohl die Bedingung eigentlich stimmt. Habt ihr dazu Ideen?

Nun zur letzten Regel (1). Ich habe viel rumprobiert, bei allen Regeln, aber nichts scheint zu funktionieren. "contains" und "ends-with" haben schonmal nicht funktioniert.. Ich bin tatsächlich etwas verzweifelt, weshalb ich mich an euch wende und hoffe, dass ihr mir helfen könnt. Ich habe so viel zu den Themen Schematron, XPath, XML, XSLT gelesen und muss leider sagen, dass ich nur die Basics verstehe aber nicht gut in der Materie bin. Ich wäre super dankbar, wenn mir jemand bei den Codes helfen könnte. Zumindest für Tipps wäre ich sehr dankbar, aber auf Webseiten kann ich einfach nicht herauslesen WAS ich genau tun muss.

Falls jemand sich wundert woher ich diese Aufgaben habe: Ich studiere und bin im letzten Semester. Mein Wahlpflichtfach ist Electronic Publishing und wir haben Externe Mitarbeiter bekommen, die uns über die oben genannten Themen unterrichten sollen. Die Themen habe ich alle in einem Praktikum bereits behandelt (daher meine Wahl des Moduls) aber nicht in der Tiefe, die nötig wäre. Leider haben die beiden Externen keine Ahnung wie man unterrichtet und leisten nur Hilfestellung in Form von Links. Daher seid ihr meine Letzte Hoffnung.

Ich danke euch!!

VG Hanna

programmieren, Rules, Programmiersprache, XML, Schema

Meistgelesene Beiträge zum Thema Programmiersprache