Cześć, mam taki kod w androidzie i dwa problemy poważne.
Pierwszy to wyrzuca mi przekroczenie tablicy, mimo, że jest warunek gdzie y+1>5 co sprawdza czy współrzędna Y w tablicy jest większa od zakresu kolumn tablicy(komentarz niżej)
Drug problem jest z orientacją pionową. Pozwala wstawić statek pomimo tego, że wiersz nizej jest jakiś obiekt już inny od wody. A czasami po prostu pisze kolizja tam gdzie normalnie można wstawic statek... Wg mnie wszystko powinno być dobrze?

Wybrany przycisk;

    @Override
    public void onClick(View v) {
        Toast toast = null;
        for (int i = 0; i < mapa.length; i++) {
            for (int j = 0; j < mapa.length; j++) {
                if (v.getId() == mapa[i][j].getId()) {
                    collision(i,j,Ship.get(0));

                }
            }
        }


    } 

Ustawienie statków

 public void setShip(int x, int y) {


        if (Ship.size() != 0) {
            if (orient.isChecked()) {

                if (Ship.get(0).equals("Jednomasztowy")) {
                    mapa[x][y].setImageResource(R.drawable.dostepnystatek);
                    mapa[x][y].setTag(R.drawable.dostepnystatek);
                }

                if (Ship.get(0).equals("dwumasztowy")) {

                    for (int i = 0; i < 2; i++) {
                        mapa[x +i][y].setImageResource(R.drawable.dostepnystatek);
                        mapa[x+i][y].setTag(R.drawable.dostepnystatek);
                    }

                } else if (Ship.get(0).equals("trójmasztowy")) {

                    for (int i = 0; i < 3; i++) {
                        mapa[x + i][y].setImageResource(R.drawable.dostepnystatek);
                        mapa[x+i][y].setTag(R.drawable.dostepnystatek);
                    }

                }
            }

            else
            {
                if (Ship.get(0).equals("Jednomasztowy")) {
                    mapa[x][y].setImageResource(R.drawable.dostepnystatek);
                    mapa[x][y].setTag(R.drawable.dostepnystatek);
                }

                else if (Ship.get(0).equals("dwumasztowy")) {

                    for (int i = 0; i < 2; i++) {
                        mapa[x][y+i].setImageResource(R.drawable.dostepnystatek);
                        mapa[x][y+i].setTag(R.drawable.dostepnystatek);

                    }

                } else if (Ship.get(0).equals("trójmasztowy")) {

                    for (int i = 0; i < 3; i++) {
                        mapa[x][y+i].setImageResource(R.drawable.dostepnystatek);
                        mapa[x][y+i].setTag(R.drawable.dostepnystatek);

                    }

                }
            }
        }
        text.setText(Ship.get(0));
        Ship.remove(0);

        } 

Kolizja

    //wykrywa kolizje
    public void collision(int x, int y, String statek) {
             boolean flaga=true;
        Toast toast;



                    if((!mapa[x][y].getTag().equals(R.drawable.blog_dp_5058985_7848593_tr_woda))) {
                                flaga=false;
                    }

                    if(statek.equals("dwumasztowy")) {
                        try {

                            if (!mapa[x][y + 1].getTag().equals(R.drawable.blog_dp_5058985_7848593_tr_woda) || y + 1 > 5) //kolizja z drugim obiektem obok lub końcem tablicy?  {

                                flaga = false;
                            }
                        } catch (ArrayIndexOutOfBoundsException e) {
                            toast = Toast.makeText(getApplicationContext(), "jest kolizja", Toast.LENGTH_SHORT);
                            toast.show();


                        }
                    }
                        else if (statek.equals("trójmasztowy")) {
                        if (!mapa[x][y + 2].getTag().equals(R.drawable.blog_dp_5058985_7848593_tr_woda)) {
                            {
                                flaga = false;
                            }
                        }

                        if (orient.isChecked()) {
                            if((!mapa[x][y].getTag().equals(R.drawable.blog_dp_5058985_7848593_tr_woda))) {
                                flaga=false;
                            }
                            if (statek.equals("dwumasztowy")) {
                                if (!mapa[x + 1][y].getTag().equals(R.drawable.blog_dp_5058985_7848593_tr_woda)) {
                                    flaga = false;
                                }
                            }
                          else   if (statek.equals("trójmasztowy")) {

                                if (!mapa[x + 2][y].getTag().equals(R.drawable.blog_dp_5058985_7848593_tr_woda)) {
                                    flaga = false;
                                }
                            }

                        }

                    }
//

        if(flaga==false)
        {
            toast=Toast.makeText(getApplicationContext(), "jest kolizja", Toast.LENGTH_SHORT);
            toast.show();
        }
        //jeśli tak ustaw statek
     if (flaga==true){
            setShip(x, y);
        }
    }