gpt4 book ai didi

java - 用颜色归档标签

转载 作者:行者123 更新时间:2023-12-01 14:32:33 25 4
gpt4 key购买 nike

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

}
}

我仍然遇到 StackOverflowError。我没有使用大部件(我的 n 最大为 20),我尝试用 if 替换 while ,但也不起作用。对于堆栈来说是否太大或者可能存在无限循环?我该如何解决这个问题?

最佳答案

可以说,出于某种原因

  • jj-1状况while意志得到满足,
  • 对于其余值,如 j-2

因此,如果您调用 fill(j)程序将

  1. 测试while j的条件(通过)

  2. 输入while循环

  3. setBackground对于 j

  4. 调用fill(j-1); .

    现在,在程序调用 fill(j+1) 之前,程序必须完成fill(j-1)因此控制流将移至 fill(j-1)级别和计划将

    1. 测试while j-1的条件(通过)

    2. 您输入while循环

    3. setBackground对于 j-1

    4. 调用fill((j-1)-1);换句话说fill(j-2) .

      再次之前 fill((j-1)+1)控制流程将移至fill(j-2)所以程序将

      1. 测试while j-2的条件(失败)
      2. 程序无法进入循环,因此将从 fill(j-2) 返回 return
    5. 调用fill((j-1)+1)fill(j) 相同

因此您的应用程序将尝试重复相同的场景,但这次在不同的堆栈级别上,这将导致 StackOverwlow。

<小时/>

为了防止这种情况,可以更改条件来测试您是否已经处于这个位置,例如

while(board[j].getName().equals("s") && board[j].getBackground() != Color.yellow)

您可以/也应该更改 whileif .

关于java - 用颜色归档标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16749714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com