Java 用彩色文件归档标签

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){}

我有标签网格(大小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){}

       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
    中的条件,而
    将得到满足
  • 对于静止值,如
    j-2
    not
所以,如果您调用
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
    的索引。