Самый маленький прямоугольник Java, заключающий другие в ArrayList - PullRequest
1 голос
/ 14 ноября 2011

Учитывая массив списков прямоугольников, моя задача состоит в том, чтобы найти наименьший прямоугольник, охватывающий все остальные прямоугольники.

import java.awt.Rectangle;
import java.util.ArrayList;

public class Homework {
public static void main(String[] args) {
    ArrayList<Rectangle> test = new ArrayList<Rectangle>();
    test.add(new Rectangle(10, 20, 30, 40));
    test.add(new Rectangle(20, 10, 30, 40));
    test.add(new Rectangle(10, 20, 40, 50));
    test.add(new Rectangle(20, 10, 50, 30));
    Rectangle enc = enclosing(test);
    System.out.println(enc);
    System.out.println("Expected: java.awt.Rectangle[x=10,y=10,width=60,height=60]");
}

public static Rectangle enclosing(ArrayList<Rectangle> rects) {
    // Your work here
}
}

Что у меня есть:

public static Rectangle enclosing(ArrayList<Rectangle> rects) {
    double topLeftX = Integer.MAX_VALUE;
    double topLeftY = Integer.MAX_VALUE;
    double bottomRightX = Integer.MIN_VALUE;
    double bottomRightY = Integer.MIN_VALUE;

    for (Rectangle r : rects) {
        if (r.getX() < topLeftX)
            topLeftX = r.getX();

        if (r.getY() < topLeftY)
            topLeftY = r.getY();

        if ((r.getX() + r.getWidth()) > bottomRightX)
            bottomRightX = (r.getX() + r.getWidth());

        if ((r.getY() + r.getHeight()) > bottomRightY)
            bottomRightY = (r.getY() + r.getHeight());
    }
    Rectangle.Double enc = new Rectangle.Double(topLeftX, topLeftY, bottomRightX - topLeftX, bottomRightY - topLeftY);

    return enc;
}

Я получаюОшибка "несовместимые типы" для моей обратной строки.Я не уверен, что нужно сделать, чтобы вывод соответствовал тестеру сверху.

Заранее спасибо!:)

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

То, что здесь происходит, у вас есть два разных типа прямоугольников. У вас есть обычный Rectangle, который содержит целочисленную информацию, и Rectangle.Double, который содержит double. Так как тип возвращаемого значения - Rectangle (целочисленная вариация), возврат Rectangle.Double является непоследовательным. Поскольку вы знаете, что все прямоугольники в массиве имеют целочисленную точность, используйте Rectangle, а не Rectangle.Double для значения результата.

1 голос
/ 14 ноября 2011

Изменение

Rectangle.Double enc = new Rectangle.Double(topLeftX, topLeftY, bottomRightX - topLeftX, bottomRightY - topLeftY);

до

Rectangle enc = new Rectangle((int) topLeftX, (int) topLeftY, (int) (bottomRightX - topLeftX), (int) (bottomRightY - topLeftY));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...