Was ich hier habe, ist das Grundgerüst des Projekts in Java. Dies basiert auf der Erstellung von Datentypen, und ich werde im Grunde genommen den Bereich und den Umfang ermitteln lassen, um festzustellen, ob sie sich schneiden oder enthalten. Ich verstehe die Formeln, die ich verwenden muss, aber wie würde ich das Rechteck b tatsächlich so erstellen, dass ich genau wie das ursprüngliche Rechteck ein x-, y-Zentrum sowie eine Breite und Höhe haben muss? Ich hatte auf ähnliche Weise versucht, das Rechteck b zu deklarieren, aber es weigert sich, eine der Variablen zuzuweisen.

Um herauszufinden, ob sich das Rechteck b mit dem anderen Rechteck schneidet, muss ich es definieren, um Berechnungen für die Ecken des Rechtecks ​​usw. durchzuführen. Hier ist mein Code:

public class OwnRectangles {

    private final double x,y;  //center of rectangle
    private final double width; //width of rectangle
    private final double height; //height of rectangle

    public Rectangle(double x0, double y0, double w, double h)
    {
        x=x0;
        y=y0;
        width=w;
        height=h;
    }
    public double area()
    {
        return width*height;
    }

    public double perimeter()
    {
        return height*2 + width*2;
    }

    public boolean intersects(Rectangle b)
    {

    }

    public boolean contains(Rectangle b)
    {

    }

    public void draw(Rectangle b)
    {
        /*Draw rectangle on standard drawing*/
    }

}

Ich versuche im Wesentlichen, ein anderes Rechteck zu erstellen. Ich habe so etwas versucht, das nicht funktionieren würde:

public OwnRectanglesb(double x2, double y2, double w2, double h2)
{
    x=x2;
    y=y2;
    width=w2;
    height=h2;
}

Dieser Name stimmt nicht nur nicht mit den OwnRectangles b überein, sondern die Öffentlichkeit ... soll nur OwnRectangles sein, wenn dies sinnvoll ist. Ganz einfach möchte ich ein zweites zu verwendendes Rechteck definieren.

1
user9453652 17 Apr. 2018 im 19:55

4 Antworten

Beste Antwort

Ich habe die Antwort herausgefunden. Dazu erstelle ich einfach verschiedene Instanzen der Klasse und setze sie direkt unter:

public OwnRectangles(double x0, double y0, double w, double h)
{
    x=x0;
    y=y0;
    width=w;
    height=h;

    Rectangle a = new OwnRectangles(//put arguments here);
    Rectangle b = new OwnRectangles(//put arguments here);
}

Wie zu sehen ist, habe ich zwei verschiedene Rechtecke basierend auf dem Klassenrechteck erstellt, und natürlich würde ich in der Klammer die Argumente einfügen, mit denen der Benutzer die Breite, Höhe usw. der Rechtecke auf einen beliebigen Wert einstellen kann.

1
17 Apr. 2018 im 21:40

Die Klasse OwnRectangle muss mit der Verwendung von Rectangle in Ihrem Code übereinstimmen. Ändern Sie beispielsweise Folgendes in:

public class Rectangle /* CHANGED FROM OwnRectangle to Rectangle */ {
    private final double x,y;  //center of rectangle
    private final double width; //width of rectangle
    private final double height; //height of rectangle

    public Rectangle(double x0, double y0, double w, double h)
    {
        x=x0;
        y=y0;
        width=w;
        height=h;
    }
    public double area()
    {
        return width*height;
    }

    public double perimeter()
    {
        return height*2 + width*2;
    }

    public boolean intersects(Rectangle b)
    {

    }

    public boolean contains(Rectangle b)
    {

    }

    public void draw(Rectangle b)
    {
    /*Draw rectangle on standard drawing*/
    }
}
1
Michael Osofsky 17 Apr. 2018 im 16:58

Um die Rechteckobjekte zu erstellen und festzustellen, ob sie sich überschneiden, sieht Ihr Code folgendermaßen aus:

Rectangle firstRectangle = new Rectangle(1, 2, 3, 4);
Rectangle secondRectangle = new Rectangle(5, 6, 7, 8);
boolean intersects = firstRectangle.intersects(secondRectangle);

Wenn die Werte 1, 2, 3, 4, 5, 6, 7, 8 nur beliebige Werte sind, würden Sie sie durch die wahren Werte ersetzen. Dann würden Sie in Ihrer intersects -Methode einfach x, y, Breite und Höhe mit b.x, b.y, b.width und b.height vergleichen. Schließlich sollten alle Verweise auf das Rechteck-Objekt dasselbe Rectangle heißen und nicht Rectangle und OwnRectangle vertauschen.

1
jeremyms 17 Apr. 2018 im 17:00

Ihr Klassenname ist OwnRectangles, aber was als Konstruktor erscheint, heißt Rectangle. Der Konstruktorname muss mit dem Klassennamen übereinstimmen, andernfalls handelt es sich nur um eine Methode. Sie können es korrigieren, indem Sie schreiben:

public class OwnRectangles {

  private final double x,y;  //center of rectangle
  private final double width; //width of rectangle
  private final double height; //height of rectangle

  public OwnRectangles(double x0, double y0, double w, double h) {
  ...
0
Karol Dowbecki 17 Apr. 2018 im 16:58