Methodenproblem (Java)

Neue Frage »

Auf diesen Beitrag antworten »
SteveD Methodenproblem (Java)

Ich habe eine Aufgabe Methoden zu schreiben, jedoch weiß ich nicht genau wie das geht... es ist so wir haben diese class datei

public class RechteckTest{

public static void main(String[] args){


Rechteck r0 = new Rechteck();
r0.x = 5;
r0.y = 4;
r0.hoehe = 6;
r0.breite = 10;

Rechteck r1 = new Rechteck();
r1.x = 10;
r1.y = 7;
r1.hoehe = 4;
r1.breite = 12;

System.out.println("r0: " + r0.info());
System.out.println("r1: " + r1.info());
System.out.println("Schnitt r0, r1: " + r0.schnitt(r1).info());
System.out.println();

Rechteck r2 = new Rechteck();
r2.x = 5;
r2.y = 4;
r2.hoehe = 6;
r2.breite = 10;

Rechteck r3 = new Rechteck();
r3.x = 10;
r3.y = 9;
r3.hoehe = 4;
r3.breite = 16;

Rechteck r4 = new Rechteck();
r4.x = 5;
r4.y = 4;
r4.hoehe = 6;
r4.breite = 10;

Rechteck r5 = new Rechteck();
r5.x = 10;
r5.y = 9;
r5.hoehe = 2;
r5.breite = 12;

RechteckSammlung sammlung = new RechteckSammlung();

sammlung.rechtecke = new Rechteck[]{r0, r1, r2, r3, r4, r5};

System.out.println("Gleiche Rechtecke:");
sammlung.gleicheRechtecke();

System.out.println();
System.out.println("Schnitt Rechtecke:");

sammlung.schnittRechtecke();

}



}

und dazu sollen wir halt die methoden
public String info ()
public boolean gleich (Rechteck recheck)
und
public Rechteck schnitt (Rechteck recheck)
machen

dazu gibts noch ne b) aber ich möchte erstmal dazu aufgeklärt werden, vll schaff ich b) dann alleine...

also meine frage ist, ich habe dies bereits geschrieben:
public class Rechteck{
public static int x,y,hoehe,breite;


public String info(){
return "Rechteck an Position (" + x + "," + y + ") mit Hoehe " + hoehe + " und Breite " + breite;
}
}

und wenn ich dann die RechteckTest.class ausführe (habe vorher das meiste auskommentiert so das erstmal nur info in RechteckTest.java ausgeführt wird) bekomme ich diese Ausgabe:

r0: Rechteck an Position (10,7) mit Hoehe 4 und Breite 12
r1: Rechteck an Position (10,7) mit Hoehe 4 und Breite 12

und ich frag mich halt wieso 2 mal dasselbe ausgegeben wird... bei r0 müsste ja eig. Pos (5,4) Höhe: 6 und Breite: 10 ausgegeben werden...
 
Auf diesen Beitrag antworten »
SteveD

ah okay lag an dem static ^^

schön dass man hier alles selber raus finden muss -.-

könnte mir denn jemand einen ansatz für die nächste methode geben, also

public boolean gleich (Rechteck recheck)

da muss halt überprüft werden ob beide rechtecke gleich sind und dann soll treu ausgegeben werden
Auf diesen Beitrag antworten »
SteveD

okay das war auch einfach, aber wie überprüft man ob die sich schneiden? Oo
Auf diesen Beitrag antworten »
SteveD

hab es jetzt mal so gelöst:

public boolean schneidet(Rechteck rechteck){
if(((rechteck.x < this.x && this.x < (rechteck.x+rechteck.breite)) && (rechteck.y > this.y && this.y > (rechteck.y-rechteck.hoehe))) || ((rechteck.x < (this.x+this.breite) && (this.x+this.breite) < (rechteck.x+rechteck.breite)) && (rechteck.y > this.y && this.y > (rechteck.y-rechteck.hoehe))) || ((rechteck.x < this.x && this.x < (rechteck.x+rechteck.breite)) && (rechteck.y > (this.y-this.hoehe) && (this.y-this.hoehe) > (rechteck.y-rechteck.hoehe))) || ((rechteck.x < (this.x+this.breite) && (this.x+this.breite) < (rechteck.x+rechteck.breite)) && (rechteck.y > (this.y-this.hoehe) && (this.y-this.hoehe) > (rechteck.y-rechteck.hoehe))))
return true;
else
return false;
}

bei mir funktionierts, wollte mal fragen ob die formel allgemeingültig ist, oder ob das jetzt nur für r0 und r1 geht... weil ich habs nur für r0 und r1 getestet, wie gesagt da kam true, weil die sich ja schneiden ^^

möchte mir jemand anregungen geben für

public Rechteck schnitt (Rechteck rechteck)

?
diese Methode soll ein Rechteck zurückgeben, das die Schnittfläche der beiden Rechteck repräsentieren soll
 
Auf diesen Beitrag antworten »
SteveD

hab das jetzt erstmal so:

public Rechteck schnitt(Rechteck rechteck){
if((this.x+this.breite) < rechteck.x || this.x > (rechteck.x+rechteck.breite)){
return(null);
}
if((this.y-this.hoehe) < rechteck.y || this.y > (rechteck.y-rechteck.hoehe)){
return(null);
}

//Schnitt existiert:
if(rechteck.x >= this.x && rechteck.x <= this.breite){
x1 = rechteck.x;
x2 = ((this.x+this.breite) < (rechteck.x+rechteck.breite)) ? (this.x+this.breite) : (rechteck.x+rechteck.breite);
}
else {
x1 = this.x;
x2 = ((this.x+this.breite) < (rechteck.x+rechteck.breite)) ? (this.x+this.breite) : (rechteck.x+rechteck.breite);
}

if(rechteck.y >= this.y && rechteck.y <= this.hoehe){
y1 = rechteck.y;
y2 = ((this.y-this.hoehe) < (rechteck.y-rechteck.hoehe)) ? (this.y+this.hoehe) : (rechteck.y-rechteck.hoehe);
}
else {
y1 = this.y;
y2 = ((this.y-this.hoehe) < (rechteck.y-rechteck.hoehe)) ? (this.y+this.hoehe) : (rechteck.y-rechteck.hoehe);
}

}

wobei x1 und x2 der bereich des rechtecks auf der x-achse ist
und y1 und y2 halt auf der y-achse

also die 4 eckpunkte des rechtecks so gesehen... nur jetzt muss ich halt die höhe davon ableiten und die breite...

und das ganze muss ich doch auch noch irgendwie in ein neues rechteck mit
Rechteck r6 = new Rechteck() oder so packen, oder?
Auf diesen Beitrag antworten »
ed209

1. Probier mal das Code-Tag zu benutzen, damit die Einrückungen nicht verloren gehen.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
public Rechteck schnitt(Rechteck rechteck){
   if((this.x+this.breite) < rechteck.x || this.x >  (rechteck.x+rechteck.breite)) {
      return(null);
   }
   if((this.y-this.hoehe) < rechteck.y || this.y > (rechteck.y-rechteck.hoehe)){
      return(null);
   }


2. Was war jetzt die Frage?
Auf diesen Beitrag antworten »
SteveD

1. danke für den tipp, hat mich auch schon gestört dass es nicht eingerückt wird

2. schon okay.... programm erfolgreich geschrieben.... keine fragen mehr....
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »