Zwei Rechtecke auf Berührung prüfen

Hi,
ich möchte gerne zwei Int Werte gleichzeitig immer in ein mehrdimensionales Array speichern, z.B. sollte das Array [0][0] gleich zwei Werte ausgeben, also z.B. 1 1
Ist das so überhaupt möglich? Ich habe dazu nicht besonders viel bisher bei der Recherche gefunden.
Falls ja, wo liegt mein Fehler, immer wenn ich untenstehende Methode ausführe, bekomme ich ein
java.lang.ArrayIndexOutOfBoundsException: 5
at Rectangle.getpositionOfCoordinates(Rectangle.java:89)
Falls nein, wie realisiere ich es, dass ich gleichzeitig X- und Y Koordinate von zwei Rechtecken überprüfe.
Also die konkrete Aufgabenstellung ist, dass ich überprüfen muss, ob sich zwei Rechtecke berühren, bzw. ineinander liegen.

        coordinatePositions = new int [heightRectangle][widthRectangle];
        int currentYCoordinate;
        for(int i=0;i<widthRectangle;i++){            
            currentYCoordinate = yCoordinateBottom + i;
            for(int j=0;j<heightRectangle;j++){
            coordinatePositions**[j] = coordinatePositions [currentYCoordinate][xCoordinateLeft + j];
            }
        }
        System.out.println(coordinatePositions[2][2]);                //nur testweise mit dem Array[2][2]
        return coordinatePositions;```

ich weiß zwar, dass es wesentlich einfacher geht in diesem Fall, aber ich wollte eben mal das mehrdimensionale Array verwenden und eben auch die oben genannten Fragen beantwortet haben.
Eine einfachere Lösung von mir ist z.B.:

```public boolean isDisjoint(Rectangle r){
        boolean isDisjoint = false;
        if((isContained(r)==false) && ((r.getLeft() > getRight()) || (r.getRight() < getLeft()) || (r.getBottom() > getTop()) || (r.getTop() < getBottom()))){
            isDisjoint = true;
        }
        else{
            isDisjoint = false;
        }
        return isDisjoint;```

Du könntest für jedes Rechteck ein Array von Points machen das 2x2 Felder hat, damit hättest du dann jeden Punkt deines Rechtecks in diesem Array. Das macht vom Speicherbedarf aber wenig Sinn.

Ich glaube dass du die mehrdimensionalen Arrays noch nicht durchblickt hast. Für Rechtecke kann ich dir die Klasse Rectanglenahelegen.
PS: Es gibt zu viele Passwörter zum merken.

Theoretisch solltest du die Klassen Point und Rectangle verwenden, da gibt es dann sogar die Methode rect.intersects()…
Wenn du mehrdimensionale Arrays benutzen willst, könnte man das so lösen:
Gegeben sei dieses Rechteck:


1;1-------------2;1
 |               |
 |               |
 |               |
1;2-------------2;2

Ein Array sähe dann so aus:
int[][][] coords = {{{1;1},{2;1}},{{1;2},{2;2}}};
Also wenn ich die linksobere Koordinate haben will, rufe ich folgendes auf:
int leftTopCoordX = coords[0][0][0], leftTopCoordY = coords[0][0][1];
(0 für X und 1 für Y Koordinate)
Rechtsunten:
int leftTopCoordX = coords[1][1][0], leftTopCoordY = coords[1][1][1];
Diese Variante ist zwar vllt logisch, allerdings nicht effizient.
Im Normalfall benutzt man für Formen generell einfach ein Array, welches dann die Koordinaten hintereinander im Point Datentyp speichert.
Ein Rechteck kannst du sonst auch gut über zwei Punkte definieren, p1 und p2.
z.B wäre das obengenannte Rechteck:
p1 = new Point(1, 1);
p2 = new Point(2, 2);

Wahrscheinlich habe ich jetzt zuviel geredet…

Gesendet von meinem iPod touch mit Tapatalk

Mit einem Array von Points habe ich bisher noch nicht gearbeitet und weiß auch nicht so genau, was das ist bisher, vielleicht komme ich nachher mal dazu mir das anzuschauen, an dieser Stelle erstmal danke für die zahlreichen Antworten.
Zu den Vorschlägen, ich würde gerne meine eigenen Klassen schreiben und verwenden und nicht die schon vorkonfigurierten.
Gibt es daher noch Lösungvorschläge, bzw. Verbesserungen zu meiner Lösung?
Kann man überhaupt in einem mehrdimensionalen Array z.B. [0][0] = 2(X-Koordinate) 3(Y-Koordinate) speichern, oder muss man das über zwei Arrays machen?

Natürlich geht das, du musst eben nur dann noch eine Verschachtelung einbauen. Dann wäre das erste Element eben die x-Koordinate und die zweite die y-Koordinate, aber das ist IMHO nicht “schön”…
Ein schönes Beispiel für verschachtelte Arrays sind Spielfelder. Da hat man nämlich die Form für so ein Array, bei einem Rechteck ist eine Anwendung nicht unbedingt selbstverständlich. Vllt willst du also lieber ein anderes Beispiel nehmen.

Gesendet von meinem iPod touch mit Tapatalk

Hmm ok,
Kannst du mir eventuell mal zeigen, wie man das dann macht mit der Verschachtelung, vielleicht am besten noch bezogen auf mein Beispiel.
Ich kann das ganze ja dann bei Gelegenheit nochmal mit einem Spielfeld umsetzen, aber erstmal würde ich gerne verstehen, wie man das macht.

Wenn du keine bestehenden Klassen verwenden willst dann sag ade zu Java und lern Assembler. Soweit ich das erkennen kann weist du auch nicht was ein Array ist, das würde ich mir vorher mal anschauen.

Eine Grundlegende Einführung für Arrays findest du zum Beispiel hier:
http://www.mpi-inf.mpg.de/departments/d5/teaching/ss05/is05/java/GoToJava2.2/html/k100026.html

Ich bin noch ziemlicher Anfänger in Java und lerne das eben grade in der Uni und da ich eben noch Klassen und sowas selber schreiben sollen, damit ich verstehe wieso das so und so funktioniert, sollen wir eben noch unsere Klassen soweit wie möglich selber schreiben, ich bin durchaus später dazu gewillt bestehen Klassen zu verwenden, aber zunächst möchte ich eben die Zusammenhänge verstehen, ich hoffe ihr könnt meine Begründung nachvollziehen.
Zu den Arrays, ich habe mir schon einige Einführungen dazu durchgelesen, aber ich habe eben bisher noch nichts dazu gefunden wie man eben z.B. für [0][0] eine X- und Y Koordinate gleichzeitg ausgeben kann.
Daher wäre ich sehr dankbar, wenn mir jemand ein kurzes Beispiel dafür geben könnte, damit ich das nachvollziehen kann.

mfg killbill

Ok, stell dir ein verschachteltes Array so vor, dass du erstmal nur ein einfaches Array hast. Jedes dieser Elemente hat wiederum den Datentyp des “parent”-Arrays als Array, jedes Element in dem Array dann wiederum usw.
z.B.:

int[][] array = new int[2][2]; // Array mit zwei mal zwei Werten erstellen
array[0][0] = 1;  // erstes Element im ersten Array soll Wert 1 haben
array[0][1] = 2;  // zweites Element im ersten Array soll Wert 2 haben
array[1][0] = 3;  // ...
array[1][1] = 4;  // ...

int[] firstArray = array[0]; // firstArray hat nun die Werte vom ersten Array in array
System.out.println(firstArray[1]); // Ausgabe ist "2"

Klarer?

Gesendet von meinem iPod mit Tapatalk

Es spricht nichts dagegen (zumindest für Übungszwecke), eine eigene Punktklasse zu verwenden.


public class MyPoint {

    /** x-Koordinate des Punktes. */
    private int x;

    /** y-Koordinate des Punktes. */
    private int y;

    /** Default-Konstruktor. Erzeugt den Nullpunkt. */
    public MyPoint() {
        this(0, 0);
    }

    /**
     * Konstruktor.
     *
     * @param x
     *            x-Koordinate des Punktes.
     * @param y
     *            y-Koordinate des Punktes.
     */
    public MyPoint(int x, int y) {
        this.x = x;
        this.y = y;
    }

    /** Getter für die x-Koordinate. */
    public int getX() {
        return x;
    }

    /** Setter für die x-Koordinate. */
    public void setX(int x) {
        this.x = x;
    }

    /** Getter für die y-Koordinate. */
    public int getY() {
        return y;
    }

    /** Setter für die y-Koordinate. */
    public void setY(int y) {
        this.y = y;
    }

    /** Stringrepräsentation erzeugen. */
    @Override
    public String toString() {
        return "MyPoint [x=" + x + ", y=" + y + "]";
    }

}

public class MyPointTester {

    public static void main(String[] args) {
        MyPoint[] points = new MyPoint[2];
        points[0] = new MyPoint(1, 2);
        points[1] = new MyPoint(3, 4);

        for (MyPoint point : points) {
            System.out.println(point);
        }
    }

}

Ausgabe:

MyPoint [x=1, y=2]
MyPoint [x=3, y=4]

@ Turakar
Dein Beispiel konnte ich jetzt soweit nachvollziehen, danke.
Allerdings wollte ich eigentlich auf so eine Ausgabe hinaus, wie Crian sie in seinem letzten Post hier hat.

Ausgabe:

 Code:

 MyPoint [x=1, y=2]
 MyPoint [x=3, y=4]

@Crian
Das mit der Punktklasse sieht interessant aus, das werde ich mir bei Gelegenheit mal genauer ansehen, danke für das ausführliche Beispiel.
@Alle
Kann man jetzt auch nur mit einem zweidimensionalen Array z.B. [0][0] erreichen, dass auch so eine Ausgabe wie in der Punktklasse entsteht?
Also z.B. das System.out.println(array[0][0]) die Ausgabe x=1, y=2 ergibt?

Ja, wenn das Array über eine Klasse ist, die so eine Ausgabe hat, also zum Beispiel ein Array über MyPoint

[QUOTE=killbill]
Kann man jetzt auch nur mit einem zweidimensionalen Array z.B. [0][0] erreichen, dass auch so eine Ausgabe wie in der Punktklasse entsteht?
Also z.B. das System.out.println(array[0][0]) die Ausgabe x=1, y=2 ergibt?[/QUOTE]
Nein, zumindest nicht so wie du es dir scheinbar vorstellst.
Ein Feld eines Arrays kann nur einen Wert enthalten bzw. nur auf ein Objekt referenzieren. Es ginge also nur wenn, wie bereits erwähnt erläutert, an Position 0 des 0. Arrays aus array auf ein Objekt referenziert wird, welches diese Info enthält.

Man könnte jedoch folgendes machen:

int[][] coords = new int[][]{{1,1},{2,2}};
for(int i = 0; i < coords.length; i++) {
  System.out.println("Point " + i + ": x=" + coords**[0] + " y=" + coords**[1]);
}

(Zum Üben ok, sonst eigentlich weniger “schön” bzw lesbar als eine Point Klasse)

Gesendet von meinem iPod mit Tapatalk