2016-10-01 11 views
1

ボンバーマンのようなパズルゲームでは、これらの行は、(2つの箱の間に)爆弾を落とすのに最適な場所を特定するために作られています。それは13 * 11グリッドです。Coord ArrayListsは同じサイズでなければなりません

2つのオブジェクトのサイズを確認すると、Xをストックしているものはもう一方のものよりはるかに大きくなります。 彼らは同じサイズの両Xが彼のYに来るようになっています。

最初の最良の動きは同じY軸上にあるので、私は2番目のarraylistがそれらを保存する新しい部屋を作っていないと思うそれはArrayListであり、Set soではありませんか?)。

ArrayList<Integer> bestSpotX=new ArrayList<Integer>();  
ArrayList<Integer> bestSpotY=new ArrayList<Integer>(); 
// ... 
for (int line=0, col=0;line<11 && col<13;line++, col++) {  
    if ((map[line].charAt(col)=='0')&&(map[line+2].charAt(col)=='0')) { 
    bestSpotX.add(col); 
    bestSpotY.add(line+1); 
    }  
} 

私の反復は間違っているのですか、それとも私がcoord値を追加する方法ですか?

+0

"2つのオブジェクトのサイズを確認すると、Xをストックしているものは他のものよりもはるかに大きくなります。"あなたの質問には、このアサーションをチェックするコードはありません。提示されたコードから、サイクルの前後に問題が起こる可能性が十分にあります。 –

+0

私の貧しい私の英語のために申し訳ありません、エイドリアン。実際、コードの残りの部分は確かです。シンプルな配列を反復処理するとうまくいくので、長さを「ハードコード」する必要があります(各ゲーム、クレートの位置の変更など) 。だから私はArrayListを選んだのです。 – GwadaKing

答えて

0

理由:

ArrayList<Integer> bestSpotX=new ArrayList<Integer>();  
ArrayList<Integer> bestSpotY=new ArrayList<Integer>(); 

ない:

class LineColLocation { 
    protected int line, col; 

// constructors, setters and getters 
} 

ArrayList<LineColLocation> bestSpots=new ArrayList<LineColLocation>();  


int bestSpotLine=...; // ... whatever logic to ... 
int bestSpotCol=...; // determine a *best spot* 

LineColLocation bestSpot=new LineColLocation(bestSpotLine, bestSpotCol); 
bestSpots.add(bestSpot); 

この方法では、あなたがsame number of X and Y in two different listsの**暗黙の要件*と誤って混乱することはできません - あなただけのこの制約をマテリアライズ(それを明示的にしてください)、この制約の検証を不要にしてください。

+0

ありがとうございます。私はJavaの初心者ですが、私は常にC言語でコード化し、 "Object"を考える必要があります! – GwadaKing

関連する問題