Plot.java на ManagementCompany.java

#java #arrays #overlap

#java #массивы #перекрытие

Вопрос:

В настоящее время я работаю над заданием, в котором нам нужно написать 3 класса. Property.java ManagementCompany.java и Plot.java . Прямо сейчас я пытаюсь убедиться, что, по крайней мере, мой класс Plot работает правильно. Я не вижу никаких ошибок в своем коде, однако предоставленный тест JUnit возвращается с ошибкой. Booth логические методы — это то, что приходит с ошибкой в JUnit. Вот что я написал:

 package assignment4;

public class Plot {

    //The x-value of the upper-left corner of the Plot
    private int x;
    //The y-value of the upper-left corner of the Plot
    private int y;
    //The horizontal extent of the Plot
    private int width;
    //The vertical extent of the Plot
    private int depth;


    public Plot() {
        x = 0;
        y = 0;
        width = 1;
        depth = 1;
    }

    public Plot(Plot p) {

        x = p.x;
        y = p.y;
        width = p.width;
        depth = p.depth;
    }

    public Plot(int x, int y, int width, int depth) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.depth = depth;
    }

    // Two rectangles do not overlap if one of the following conditions is true.
    // One rectangle is above top edge of other rectangle.
    // One rectangle is on left side of left edge of other rectangle.
    public boolean overlaps(Plot plot) {
        if (this.x <= plot.x   (plot.width - plot.x) amp;amp; this.y <= plot.y   (plot.depth - plot.y)) {


            if (plot.x <= this.x   (this.width - this.x) amp;amp; plot.y <= this.y   (this.depth - this.y))
                return false;
        }

        return true;
    }

    //Second boolean
    public boolean encompasses(Plot plot) {
        if (this.x <= plot.x amp;amp; this.y <= plot.y) {
            return true;
        }
        if (this.depth <= plot.depth amp;amp; this.width <= plot.width) {
            return true;
        }
        return false;
    }

    public void setX(int x) {
        this.x = x;
    }

    public void setY(int y) {
        this.y = y;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public void setDepth(int depth) {
        this.depth = depth;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    public int getWidth() {
        return width;
    }

    public int getDepth() {
        return depth;
    }

    public String toString() {
        return "Upper left: ("   x   ","   y   "); "   "Width: "   width   " Depth: "   depth;
    }
}
  

Вот тест JUnit:

 public class PlotTest {
    private Plot plot1, plot2, plot3, plot4, plot5, plot6, plot7, plot8, plot9,
    plot10, plot11, plot12, plot13;

    @Before
    public void setUp() throws Exception {
        plot1 = new Plot(12, 12, 6, 6);
        plot2 = new Plot(10, 10, 2, 2);
        plot3 = new Plot(11, 11, 3, 2);
        plot4 = new Plot(16, 11, 4, 2);
        plot5 = new Plot(13, 14, 4, 3);
        plot6 = new Plot(16, 15, 3, 1);
        plot7 = new Plot(11, 16, 3, 3);
        plot8 = new Plot(16, 17, 4, 2);
        plot9 = new Plot(11, 14, 2, 1);
        plot10 = new Plot(19, 12, 2, 2);
        plot11 = new Plot(12, 12, 3, 2);
        plot12 = new Plot(15, 17, 3, 1);
        plot13 = new Plot(15, 17, 3, 1);
    }

    @After
    public void tearDown() throws Exception {
        plot1 = plot2 = plot3 = plot4 = plot5 = plot6 = plot7 = plot8 = plot9 = plot10 = plot11 = plot12 = plot13 = null;
    }

    @Test
    public void testOverlaps1() {
        assertTrue(plot1.overlaps(plot11)); //plot11 is entirely inside plot1
        assertTrue(plot11.overlaps(plot1));
    }
    @Test
    public void testOverlaps2() {
        assertTrue(plot1.overlaps(plot3)); //plot3 overlaps the lower left corner of plot1
        assertTrue(plot3.overlaps(plot1));
        assertTrue(plot1.overlaps(plot4)); //plot4 overlaps the lower right corner of plot1
        assertTrue(plot4.overlaps(plot1));
    }
    @Test
    public void testOverlaps3() {
        assertTrue(plot1.overlaps(plot7)); //plot7 overlaps the upper left corner of plot1
        assertTrue(plot7.overlaps(plot1));
        assertTrue(plot1.overlaps(plot8)); //plot8 overlaps the upper right corner of plot1
        assertTrue(plot8.overlaps(plot1));
    }
    @Test
    public void testOverlaps4() {
            assertTrue(plot1.overlaps(plot9)); //plot9 overlaps the left side of plot1
            assertTrue(plot9.overlaps(plot1));
            assertTrue(plot1.overlaps(plot6)); //plot6 overlaps the right side of plot1
            assertTrue(plot6.overlaps(plot1));
        } **
        FAILS HERE **
        @Test
    public void testOverlaps5() {
            assertFalse(plot3.overlaps(plot9)); //plot9 does not overlap plot3
            assertFalse(plot9.overlaps(plot3));
            assertFalse(plot5.overlaps(plot8)); //plot5 does not overlap plot8, but partly share a side
            assertFalse(plot8.overlaps(plot5));
        } **
        IT FAILS HERE **
        @Test
    public void testOverlaps6() {
            assertFalse(plot3.overlaps(plot4)); //plot4 does not overlap plot3
            assertFalse(plot4.overlaps(plot3));
            assertFalse(plot1.overlaps(plot10)); //plot1 does not overlap plot10
            assertFalse(plot10.overlaps(plot1));
            assertFalse(plot2.overlaps(plot1)); //plot2 does not overlap plot1
            assertTrue(plot12.overlaps(plot13)); //plot12 is exactly the same dimensions as plot13
        } **
        ALSO THIS ONE FAILS **
        @Test
    public void testEncompasses1() {
        assertTrue(plot1.encompasses(plot5)); //plot5 is contained in plot1
        assertFalse(plot5.encompasses(plot1));
        assertTrue(plot1.encompasses(plot11)); //plot11 is contained in plot1
        assertFalse(plot11.encompasses(plot1));
        assertTrue(plot1.encompasses(plot12)); //plot12 is contained in plot1
        assertFalse(plot12.encompasses(plot1));

        assertFalse(plot2.encompasses(plot1));
        assertFalse(plot3.encompasses(plot1)); //plot3 overlaps plat1
        assertFalse(plot1.encompasses(plot3));
        assertFalse(plot7.encompasses(plot8)); //plot7 overlaps plat8
        assertFalse(plot8.encompasses(plot7));
    }

    @Test
    public void testToString() {
        assertEquals("Upper left: (12,12); Width: 6 Depth: 6", ""   plot1);
    }

    @Test
    public void testGetWidth() {
        assertEquals(2, plot2.getWidth());
    }

    @Test
    public void testSetX() {
        plot3.setX(22);
        assertEquals(22, plot3.getX());
    }
}
  

Любая помощь была бы потрясающей!

Комментарии:

1. Здравствуйте и добро пожаловать. Что-то не так с условиями if в функции «перекрытия». «plot.x (plot.width — plot.x)» приравнивается к plot.width, аналогично «plot. y (plot.depth — plot.y)» приравнивается к plot.depth. Затем, по сути, вы проверяете this.x на соответствие целевому plot.width , this . y против целевого графика.глубина. Исправьте ваши условия if

2. для функции enclosures не удалось выполнить следующие строки: участок 5 охватывает участок 1, участок 11 охватывает участок 1, участок 12 охватывает участок 1, участок 2 охватывает участок 1, участок 3 охватывает участок 1, участок 7 охватывает участок 8. Это показывает, что rectangle inside не выполняет функцию environment по отношению к внешнему прямоугольнику, окружающему его. возможно, вы захотите пересмотреть свою всеобъемлющую логику.

3. Я, наконец, смог это понять. Тесты 5 и 6 были моей самой большой проблемой. Я создал оператор and if внутри другого. И это, похоже, сработало: общедоступные логические перекрытия (Plot plot) { логический результат = false; if (plot.getX() <= this.x this . width amp;amp; this.x <= plot.getX() plot.getWidth()) { результат = true; } если ( this.y < plot.getY() plot.getDepth() amp;amp; this . y this.depth > plot.getY()) { если (plot.getX() <= this.x this. ширина) { if(this.x <= plot.getX() plot.getWidth()) { результат = true; } } } else { результат = false;

4. Добавьте этот фрагмент кода в конец вашего вопроса, указав, что вы решили свою проблему. Также как насчет функции «охватывает». Удалось ли это исправить?