#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. Добавьте этот фрагмент кода в конец вашего вопроса, указав, что вы решили свою проблему. Также как насчет функции «охватывает». Удалось ли это исправить?