java - 当有两个 for() 循环时,第二个不起作用

标签 java

这是我的 for() 循环:

public void showMovementCase(){
    int movePlusAttack = moveAllowed+attackDistance;
    int twiceMoveAllowed = (moveAllowed)*2;
    for(int i = 0; i <= movePlusAttack*2; i++){
        for(int j = 0; j <= movePlusAttack*2;j++){
            boolean a = movePlusAttack <= j+i && movePlusAttack >= j-i && i <= movePlusAttack;
            boolean b = movePlusAttack <= j+i && movePlusAttack >= i-j && i > movePlusAttack && j <= movePlusAttack;
            boolean c = movePlusAttack*3 >= j+i && movePlusAttack >= j-i && i > movePlusAttack &&  j >= movePlusAttack;
            if(a || b || c){
                try{
                    actionSquare[i][j] = new JLabel();
                    actionSquare[i][j].setIcon(redsquare);
                    actionSquare[i][j].setBounds(sprite.getX()+(i-movePlusAttack)*16,sprite.getY()+(j-movePlusAttack)*16, 16, 16);
                    panel.add(actionSquare[i][j], new Integer(1));
                }
                catch(ArrayIndexOutOfBoundsException e){System.out.println("red :" + e);}
            }
        }
    }
    for(int x = 0; x <= twiceMoveAllowed; x++){
        for(int y = 0; y <= twiceMoveAllowed;y++){
            boolean a = moveAllowed <= y+x && moveAllowed >= y-x && x <= moveAllowed;
            boolean b = moveAllowed <= y+x && moveAllowed >= x-y && x > moveAllowed && y <= moveAllowed;
            boolean c = moveAllowed*3 >= y+x && moveAllowed >= y-x && x > moveAllowed &&  y >= moveAllowed;
            if(a || b || c){
                try{
                    actionSquare[x][y].setIcon(bluesquare);
                    System.out.println("Coucou !");
                    actionSquare[x][y].addMouseListener(mouse);
                    panel.repaint();
                    panel.revalidate();
                }
                catch(ArrayIndexOutOfBoundsException e){System.out.println("blue :" + e); }
            }
        }
    }
}

如果 this.attackDistance 不为 0,则第二个循环不起作用(它似乎在 .setIcon() 命令处停止)。

你知道解决这个问题的方法吗?

感谢您的阅读。

编辑:

与:

                try{
                    actionSquare[x][y].setIcon(bluesquare);
                    System.out.println("Coucou !");
[...]
                }

在第二个循环中,没有打印任何内容。

但是:

            try{
                System.out.println("Coucou !");
                actionSquare[x][y].setIcon(bluesquare);

[...] }

“凑凑!”打印一次。 这就是为什么我说“它似乎停在 .setIcon() 命令处”,我应该早点说,抱歉。

最佳答案

这里有一些提示:

  • 不要捕获异常并且不对它们执行任何操作。这就是您在两个循环中所做的事情,因此您看不到错误消息是正常的。

  • 每当您看到像这样的长语句时,都应该暗示您可以重构它。例如,创建一个单独的方法来验证您是否要在循环中执行某些操作,然后在 main 方法中调用它,例如 if(shouldPerformAction())

  • 考虑使用少于 8 个空格进行缩进。这只会占用您的屏幕空间。

  • 如果计算应该是固定的(例如 this.moveAllowed*2),请考虑在循环之前而不是在循环条件内进行计算

  • 恕我直言,用 this 作为所有方法/字段的前缀是没有意义的,它只会让一切变得困惑。直接调用方法即可。

关于java - 当有两个 for() 循环时,第二个不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1698368/

相关文章:

java - 具有多个相同元素的 JComboBox 始终选择元素的第一个实例

java - 如何将 Java 语法转换为 C# 的 Myclass obj=new Myclass(){ public override mymethod() }

java - 将对象图展平为 map

java - 将 VLCJ 媒体播放器添加到 JavaFX 中的 Canvas

java - 主要方法 parseBoolean 不起作用

java - 跨平台监听和注入(inject)粘贴操作

java - 匹配Java中的最后一组内容

Java连接以构建字符串或格式

Java EE 架构 - CDI Beans 属于哪里?

java - 抑制消息 "Java was started but returned exit code"