Java 用彩色文件归档标签
我有标签网格(大小n*n),我想用颜色填充它不规则的部分。我写了一个方法Java 用彩色文件归档标签,java,labels,Java,Labels,我有标签网格(大小n*n),我想用颜色填充它不规则的部分。我写了一个方法 private void fill(int j){ while(board[j].getName().equals("s")){ board[j].setBackground(Color.yellow); try{ fill(j-1); } catch (ArrayIndexOutOfBoundsException e){}
private void fill(int j){
while(board[j].getName().equals("s")){
board[j].setBackground(Color.yellow);
try{
fill(j-1);
} catch (ArrayIndexOutOfBoundsException e){}
try{
fill(j+1);
} catch (ArrayIndexOutOfBoundsException e){}
try{
fill(j+n);
} catch (ArrayIndexOutOfBoundsException e){}
try{
fill(j-n);
} catch (ArrayIndexOutOfBoundsException e){}
}
}
而且我还是有点晕机。我没有使用大部件(我的n最大值为20),我尝试用if替换,但也不起作用。它对于堆栈来说是太大了还是可能存在无限循环?我如何解决这个问题?board[j].setName(“bgSet”)
之后
board[j].背景(颜色.黄色)
这可能会解决问题,否则您的while总是正确的。出于某种原因
和j
中的条件,而j-1
将得到满足
- 对于静止值,如
notj-2
fill(j)
程序将
j
条件下测试(通过)
j
fill(j-1)代码>
现在,在程序调用fill(j+1)
之前,程序必须完成fill(j-1)
,所以控制流将移动到fill(j-1)
级别,程序将
在j-1
条件下测试(通过)
在循环时输入
j-1
调用fill((j-1)-1)代码>换句话说填充(j-2)
在fill((j-1)+1)之前,
控制流将移动到fill(j-2)
,因此程序将
在j-2
条件下测试(失败)
程序无法进入循环,因此将从填充返回(j-2)
调用fill((j-1)+1)
,它与fill(j)
为了防止这种情况,如果你已经在这个职位上,可以改变条件来测试,比如
while(board[j].getName().equals("s") && board[j].getBackground() != Color.yellow)
您还可以/应该将
while
更改为if
递归调用的终止条件是什么?你希望j的最小值和最大值是多少?为了更快地获得更好的帮助,请发布一个。谢谢,它很有效。但是你知道我怎样才能把它切割到边界吗?当前几行的标签上色时,我应该在哪里断开/返回以避免下一行的标签上色?我不确定你在问什么。你可能应该提出另一个问题,描述一下你的情况,说明你拥有什么,你想要什么。在某些情况下,标签j+1可能是下一行标签中的第一个,它将是彩色的,但我不想要it@user2420287如果您将标签从0
编号为n*n-1
,则我怀疑每行中的第一个标签将具有索引%n==0
的索引。