Java – die besten Beiträge

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

JAVA Arraylist Berechnen mit int und double und Abspeichern von Zwischenwerten?

Hallo Zusammen

Ich muss in einer Aufgabe int und Double Werte miteinander multiplizieren, siehe im Code bei TODO.

import java.util.ArrayList;

public class Einkauf {
	
	private ArrayList<Produkt> produkte = new ArrayList<Produkt>();

	public void addEinkauf(double preis, 
	                        int faktor, 
	                        int menge, 
	                        String name) {
		produkte.add(new Produkt(preis, faktor, menge, name));
	}
	
	public double getPunkte() {
		
// TODO: Punkte des Einkaufs berechnen und zurückgeben
    double punkte;  // sollte richtig sein 
    for (Produkt p : produkte){
        punkte = (preis*menge*faktor); // hier ist ein Fehler 
        produkte.save(punkte);
        return punkte;
    }
	}
}

Es sollen die Treuepunkte wie folgt berechnet werden: Pro CHF Umsatz gibt es einen Punkt. Rappenbeträge werden berücksichtigt: Kostet ein Produkt CHF 3.20, ergibt dies 3.2 Punkte. Zusätzlich kann bei jedem Produkt ein Faktor angegeben werden. Damit kann der Grossverteiler für bestimmte Produkte mehr Punkte ausschütten. Wenn beispielsweise ein Produkt für CHF 3.20 einen Faktor von 10 hat, gibt es für dieses Produkt 32 Punkte.

Für den oben gezeigten Einkauf beträgt das Punkte-Total 207.15.

Sprich, bei jedem Einkauf soll der zwischenwert gespeichert werden.

programmieren, Java, Array, Programmiersprache, Arraylist

Meistgelesene Beiträge zum Thema Java