我的第二个for循环没有运行?

时间:2014-10-31 04:14:43

标签: java loops

我有2个for循环,我正在制作一个类似2048的游戏。如果某些东西向左滑动,则此方法返回true。但是,它会向我返回false,并且只有" banana"是印刷,这意味着另一个循环甚至不执行。可能是什么情况?

  public boolean slideLeft(int[][] array, int row) {
    int[] array2 = new int[array.length];
    boolean result = false;
    for(int j = 0; j < array.length; j++) {
      array2[j] = array[j][row];
      System.out.println("banana");
    }
    for (int i = 0; i <array2.length; i ++) {
      if (array2[i] == 0 && array2[i+1] != 0 && i != array2.length-1) {
        System.out.println("apple");
        array2[i] = array2 [i+1];
        result = true;
      }
      if(array2[i] != 0 && i != 0 && array2[i-1] == array2[i]) {
        System.out.println("pear");
        array2[i-1] = 2*(array2[i-1]);
        array2[i]=0;
        result = true;
      }
    }
    return result;
  }

3 个答案:

答案 0 :(得分:0)

执行了第二个for循环,但第二个for循环内的条件都不匹配。然后你不会得到任何输出。

您可以确保第二个for循环正在运行,只需添加else并打印一些内容。

您需要重新考虑并重新考虑第二个for循环中的条件才能纠正它们。

答案 1 :(得分:0)

您的其他for循环会在ArrayIndexOutOfBoundsException时抛出i==array2.length-1,因为以下条件是从左到右计算的,因此array2[i+1]会在评估i != array2.length-1之前得到评估。

  if (array2[i] == 0 && array2[i+1] != 0 && i != array2.length-1) {
    System.out.println("apple");
    array2[i] = array2 [i+1];
    result = true;
  }

您应将其更改为:

  if ( i != array2.length-1 & array2[i] == 0 && array2[i+1] != 0) {
    System.out.println("apple");
    array2[i] = array2 [i+1];
    result = true;
  }

您的第二个if条件会避免类似的异常,因为您在检查i != 0之前检查了array2[i-1] == array2[i]

答案 2 :(得分:0)

似乎您正在尝试创建一个长度为array2的整数数组array.lengtharray.length可能只包含两行(单行的可能性被删除,因为如果只有一行,您会看到IndexOutofBoundException),在这种情况下,您的if conditions会永远不会被执行

您可以通过在第二个check statements for array.length中添加elsefor loop子句来解决这个问题。