This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center。
6年前关闭。
这是一个多方面的问题。
限制条件:
不能使用
不能更改为其他对象类型(我不能将
我认为我的问题可能是我没有完全掌握如何引发异常。
虽然不确定。
这是我坚持的作业的一部分。
如果可能,将鱼f添加到鱼列表中。
首先检查鱼所在位置的景观是否等于ROCK。
如果是,则不将鱼添加到列表中。相反,会抛出一个
IllegalFishPositionException,传递
接下来检查是否有另一条鱼(与参数不同)
与参数相同的位置。如果找到一条,那条鱼就是
没有添加到列表中。而是抛出一个IllegalFishPositionException,
将
构造函数。
否则,将参数添加到鱼列表中。
这是第二种方法,对我来说似乎很合逻辑,但测试失败。
我还有其他几种依赖于addFish的方法,因此,如果我能正确解决问题,它将具有级联效果。
这是我需要为isSpaceAvailable方法通过的JUnit测试。
如果您需要仔细阅读,这里是该项目的JavaDoc。
http://www.cs.umd.edu/class/spring2013/cmsc131-23/Projects/P7/doc/index.html
我盯着这个已经有一段时间了,我完全陷入困境。
6年前关闭。
这是一个多方面的问题。
限制条件:
不能使用
.clone()
或Collections
或System
。不能更改为其他对象类型(我不能将
ArrayList
更改为List
或其他)。我认为我的问题可能是我没有完全掌握如何引发异常。
虽然不确定。
这是我坚持的作业的一部分。
如果可能,将鱼f添加到鱼列表中。
首先检查鱼所在位置的景观是否等于ROCK。
如果是,则不将鱼添加到列表中。相反,会抛出一个
IllegalFishPositionException,传递
IllegalFishPositionException.FISH_OVER_ROCK
到构造函数。接下来检查是否有另一条鱼(与参数不同)
与参数相同的位置。如果找到一条,那条鱼就是
没有添加到列表中。而是抛出一个IllegalFishPositionException,
将
IllegalFishPositionException.TWO_FISH_IN_ONE_PLACE
传递给构造函数。
否则,将参数添加到鱼列表中。
public void addFish(Fish f) {
ArrayList <Fish> addFish = new ArrayList <Fish>( fish );
if ( landscape[ f.getRow() ][ f.getCol() ] == ROCK ) {
throw new IllegalFishPositionException(
IllegalFishPositionException.FISH_OVER_ROCK );
}
for ( Fish f1 : addFish ) {
if ( ( f1.getRow() == f.getRow() &&
f1.getCol() == f.getCol() ) || f1 == f ) {
throw new IllegalFishPositionException(
IllegalFishPositionException.TWO_FISH_IN_ONE_PLACE );
}
}
for ( Fish f2 : addFish ) {
if ( ( f2.getRow() != f.getRow() &&
f2.getCol() != f.getCol() ) &&
landscape[ f.getRow() ][ f.getCol() ] != ROCK ) {
fish.add( f );
}
}
}
这是第二种方法,对我来说似乎很合逻辑,但测试失败。
/* Checks the specified location to see if it has a rock, fish, or plant
* in it. If so, returns false; if it is just water, returns true. */
public boolean isSpaceAvailable(int r, int c) {
if ( landscape[r][c] == ROCK ) {
return false;
}
for ( Fish f : fish ) {
if ( ( f.getRow() == r ) && ( f.getCol() == c ) ) {
return false;
}
}
for ( Plant p : plants ) {
if ( ( p.getRow() == r ) && ( p.getCol() == c ) ) {
return false;
}
}
return true;
}
我还有其他几种依赖于addFish的方法,因此,如果我能正确解决问题,它将具有级联效果。
这是我需要为isSpaceAvailable方法通过的JUnit测试。
@Test
public void testIsSpaceAvailable() {
Model m = new Model(10,10,0,0,0);
Fish f = new Fish(1, 7, 100, Fish.UP);
Plant p = new Plant(2, 8, 100);
m.addFish(f);
m.addPlant(p);
assertFalse(m.isSpaceAvailable(1, 7));
assertFalse(m.isSpaceAvailable(2, 8));
assertFalse(m.isSpaceAvailable(0, 0));
for (int i = 1; i < 9; i++) {
for (int j = 1; j < 9; j++) {
if ((i != 1 || j != 7) && (i != 2 || j != 8)) {
assertTrue(m.isSpaceAvailable(i, j));
}
}
}
}
如果您需要仔细阅读,这里是该项目的JavaDoc。
http://www.cs.umd.edu/class/spring2013/cmsc131-23/Projects/P7/doc/index.html
我盯着这个已经有一段时间了,我完全陷入困境。
最佳答案
addFish
处于错误状态。删除本地ArrayList
,如果您担心线程安全/并发,请使用锁定策略或同步该方法。最后一个循环是错误且多余的,到您击中它时,您就已经满足了添加鱼的条件。
您可以在植物所在的地方加一条鱼吗?
public void addFish(Fish f) {
if ( landscape[ f.getRow() ][ f.getCol() ] == ROCK ) {
throw new IllegalFishPositionException(
IllegalFishPositionException.FISH_OVER_ROCK );
}
for ( Fish f1 : this.fish ) {
// is Fish.equals implemented if so use that.
if ( f1 == f){
// fish already in list nothing to do
// usually bad practice to have return in middle of method
return;
} else if ( ( f1.getRow() == f.getRow() &&
f1.getCol() == f.getCol() )) {
throw new IllegalFishPositionException(
IllegalFishPositionException.TWO_FISH_IN_ONE_PLACE );
}
}
fish.add( f );
}
10-06 03:21