首页 > 解决方案 > For 循环无故中断

问题描述

我正在制作 2048 克隆,但它拒绝合并不在交互的第一行/列上的块,经过进一步调查,我发现 for 循环没有正常工作

用于演示目的的示例代码:

import java.util.Arrays;

public class teste{
  public static void main(String[] args){
    int[] gameBoard = new int[] {4,2,2,0} ;

    gameBoard = pushLeft(gameBoard);
    System.out.println(Arrays.toString(gameBoard));

  }


  public static int[] pushLeft(int[] gameBoard) {
    System.out.println("Pushing left...");
    // This one is the troublemaker
    for (int y = 1; y < 4; y++) {
      System.out.println("Y = " + y);
      boolean[] alreadyCombined = { false, false, false, false };
      if(gameBoard[y] != 0) {
        int value = gameBoard[y];
        int aux = y-1;
        while ( (aux >= 0) && (gameBoard[aux] == 0)) {
          aux--;
        }
        if (aux == -1) {
          gameBoard[y] = 0;
          gameBoard[0] = value;
        }
        else if (gameBoard[aux] != value && y-aux != 1) {
          gameBoard[y] = 0;
          gameBoard[aux+1] = value;
        }
        else if(gameBoard[aux] != value) {
          break;
        }
        else {
          if(alreadyCombined[aux]) {
            gameBoard[y] = 0;
            gameBoard[aux+1] = value;
          }
          else {
            gameBoard[y] = 0;
            gameBoard[aux] *= 2;
            alreadyCombined[aux] = true;
          }
        }
      }
    }
    return gameBoard;
  }

此代码返回此输出:

Pushing left...
Y = 1
[4, 2, 2, 0]

如您所见,它缺少 Y = 2 和 Y = 3,这使得 2 个内部的两个不结合。有任何想法吗?

标签: javafor-loop

解决方案


您的代码通过

else if(gameBoard[aux] != value) {
          break;
        }

所以 break 迫使你停止循环,因为value = 2et 和gameBoard[aux] = 4 你应该尝试打印这些值以查看你的问题在哪里


推荐阅读