2

2D 配列を処理し、周囲の要素に基づいて計算を行い、新しい配列を作成するプログラムを作成しています。まず、さまざまなケースをテストするための単純な Java プログラムを作成しました。要素が配列の端にあるかどうかを正しく処理し、その場合はその要素と"up, down, left, or right"等しい値を設定したいと思います。私のテストプログラムは、上、左、または端にない要素に対しては機能しますが、下または右には機能しません。これは私の現在のコードです:

public class ArrayTest 
{ 
   public static void buildE(int[][] array, int y, int x)
   {
      int up; 
      int down; 
      int left;
      int right; 

      //if element is on the top left
      if (y == 0 && x == 0)
      {
         up = array[y][x];
         down = array[y + 1][x];
         left = array[y][x];
         right = array[y][x + 1];
      }

      //if element is on bottom right
      else if (y == array.length && x == array.length)
      {
         up = array[y - 1][x];
         down = array[y][x];
         left = array[y][x - 1];
         right = array[y][x];
      }

      //if element is on top right
      else if(y == 0 && x == array.length)
      {
         up = array[y][x];
         down = array[y + 1][x];
         left = array[y][x - 1];
         right = array[y][x];
      }

      //if element is on bottom left
      else if (y == array.length && x == 0)
      {
         up = array[y - 1][x];
         down = array[y][x];
         left = array[y][x];
         right = array[y][x + 1];
      }

      //if element is on top 
      else if (y == 0) 
      { 
         up = array[y][x];
         down = array[y + 1][x];
         left = array[y][x - 1];
         right = array[y][x + 1];
      }  

      //if element is on left
      else if (x == 0)
      {
         up = array[y - 1][x];
         down = array[y + 1][x];
         left = array[y][x];
         right = array[y][x + 1];
      }

      //if element is on bottom
      else if(y == array.length)
      {
         up = array[y - 1][x];
         down = array[y][x];
         left = array[y][x - 1];
         right = array[y][x + 1];
      }

      //if element is on right
      else if (x == array.length)
      {
         up = array[y - 1][x];
         down = array[y + 1][x];
         left = array[y][x - 1];
         right = array[y][x];
      }

      //if element is not on an edge 
      else
      {
         up = array[y - 1][x];
         down = array[y + 1][x];
         left = array[y][x - 1];
         right = array[y][x + 1];   
      }

      System.out.println();
      System.out.print("#####################################");
      System.out.println();
      System.out.println("Array Element: " + array[y][x]);
      System.out.println("Up: " + up);
      System.out.println("Down: " + down);
      System.out.println("Left: " + left);
      System.out.println("Right: " + right);
   }

   public static void outputArray(int[][] array)
   {
      for(int row = 0; row < array.length; row ++)
      {
         for (int column = 0; column < array[row].length; column++)
            System.out.printf("%d ", array[row][column]);
         System.out.println();
      }
   }

   public static void main(String[] args)
   {
      int [][] myArray = {{1, 12, 13, 14, 15}, {2, 22, 23, 24, 25},
         {3, 32, 33, 34, 35}, {4, 42, 43, 44, 45}, {5, 52, 53, 54, 55}};
      outputArray(myArray);
      buildE(myArray, 4, 0);
   }
}

さらに設定y = 4すると、これを として認識しませんmyArray.length。ただし、まで繰り返しても、実際のプログラムではこれが問題になるとは思いませんarray.length。どんな助けでも大歓迎です!

4

2 に答える 2

4

配列インデックスは0から始まり、配列の長さが5の場合、最後の要素は4番目のインデックスでアクセスされます。あなたのコードで

  else if (y == array.length && x == array.length)
{

    up = array[y - 1][x];//Exception here
    down = array[y][x];
    left = array[y][x - 1];
    right = array[y][x];

}

次のように変更します。

 else if (y == array.length-1 && x == array.length-1)
    {

        up = array[y - 1][x];
        down = array[y][x];
        left = array[y][x - 1];
        right = array[y][x];

    }

他の場合も同じアプローチに従います。

于 2012-10-29T22:28:05.370 に答える
1

y = 4 でメソッドを呼び出して入力すると

// if element is on left
else if (x == 0) {
    up = array[y - 1][x];
    down = array[y + 1][x];
    left = array[y][x];
    right = array[y][x + 1];
}

その後、あなたは実際に残っており、最終的な行にいます。だから「落ち込む」ことはできません。この場合、これにより例外が発生します。あなたはそれをに変更することができます

// if element is on left and not on bottom line
else if (y < array.length && x == 0) {
于 2012-10-29T22:31:40.523 に答える