2017-11-23 7 views
-1

今のところ私はGRIDで定義されたグリッド値を取るコードの作業セットを作成しました。私はこのチェックをしているときに値が複数の範囲外の問題と一致するかどうかは不明です。私はすべてのコードを表示しているわけではありませんが、このコードは、値Eが基点となるグリッドのサイズ全体のforループにラップされています。このforループはxとyを使うので、e =グリッドのその点で見つかった値と仮定します。このコードの冗長性を減らし、機能を失うことなくずっと簡単にすることが可能かどうかは、私が疑問に思っていたこと以外はすべてです。グリッド上で隣り合った8つの値を調べる方が良いですか?

//assume e has been checked to be in bounds already but the outside squares have not 
//(and that they need to have there data changed if out of bounds to = e and if not then they need to be changed to the value at that point in the grid) 
    double a=0,b=0,c=0,d=0,f=0,g=0,h=0,i=0; 
    boolean ay = false,by= false,cy= false,dy= false,fy= false,gy= false,hy= false,iy= false; 
          if (x==0) 
          {a=e;d=e;g=e; 
          ay = true;dy = true;gy = true;} 
          if (y==0) 
          {a=e;b=e;c=e; 
          ay = true;by = true;cy = true;} 
          if (x== grid.length-1) 
          {c= e;f=e;i=e; 
          cy = true;fy = true;iy = true;}     
          if (y== grid.length-1) 
          {g=e;h=e;i=e; 
          gy = true;hy = true;iy = true;} 

          if (ay== false) 
           a =grid(y-1, x-1); 
          if (by== false) 
           b= grid(y-1,x); 
          if (cy== false) 
           c =grid(y-1,x+1); 
          if (dy== false) 
           d =grid(y,x-1); 
          if (fy== false) 
           f =grid(y,x+1); 
          if (gy== false) 
           g =grid(y+1,x-1); 
          if (hy== false) 
           h= grid(y+1,x); 
          if (iy== false) 
           i =grid(y+1,x+1); 

編集: このコードはグリッドからデータを取得し、傾きの計算のためにそれを使用することを意味します。所定のポイントにデータがない(または範囲外である)場合、データには中心の値が与えられます。このコード部分の目的は、配列のデータをチェックするときにヌルポイントエラーが発生しないようにすることです。

+1

は私がうんざりしてそれを閉じて作るいくつかの質問があります。私が助ける力を持っているよりも勇敢です。 – OldCurmudgeon

+0

皆さんが明確にする必要がある場合は、私のポストに詳細を書き込んだり、ここに掲載して嬉しいです。 –

+0

おそらくちょうどそのコードが**想定しているものを正確に記述することです**。 – OldCurmudgeon

答えて

1

使用数学の方法あなたには、いくつかの単純化と明確化を行うことを可能にする: - 申し訳ありませんが、おそらく誰かがこのような

int minI = Math.max(x - 1, 0); 
int maxI = Math.min(grid.length - 1, x + 1) 
int minJ = Math.max(y - 1, 0); 
int maxJ = Math.min(grid.length - 1, y + 1) 

for (int i = minI; i <= maxI; i++) { 
    for (int j = minJ; j <= maxJ; j++) { 
     if (i != x && j != y) { 
      // do your test in here 
     } 
    } 
} 

か何かがうまくいく

+0

これを読んで、このコードが何をするのかは、インバウンドである限り引き出す数字の範囲を決定することです。私はこれを可能な解決策として見てきましたが、このソリューションではデータ外のすべての値が除外されています。 –

+0

これはデータの配列に適していると思いますか?もしそうなら、私はまた、for文の中にネストされたif文が範囲外の値を含むelse文を持つことができると仮定したいと思います。 –

関連する問題