SOS:Battleship Java(用于声明和数组维度)

时间:2015-06-03 08:44:21

标签: java arrays for-loop indexing

人! 所以,我试图用Java创建Battleship游戏(经典!),具有基本的数组和方法知识。 我创建了一个2维的布尔板来放置我的船只,这是我的代码:

public void placerBateau(int x, int y, boolean dir, int longueur){
    int abs = this.x;
    int ord = this.y;
    this.longueur = longueur;

    if(!tabPlat[x][y]){
        if(dir){
            for(abs=ligne; ligne<ligne+this.longueur; abs++){
                tabPlat[abs][ord] = true;
            }
        } else {
            for(ord=colonne; colonne<colonne+this.longueur; ord++){
                tabPlat[abs][ord] = true;
            }
        }
    }
}


public class BatailleNavale {
public static void main(String [] args){
    boolean [][] tabPlat = { { false , false , false , false, false } , { false , false , false , false, false } , { false , false , false , false, false } , { false , false , false , false, false } , { false , false , false , false, false } ,  { false , false , false , false, false } };
    Plateau plat1 = new Plateau(tabPlat);
    plat1.placerBateau(2, 2, true, 2);
    plat1.tir(2, 2);
    System.out.println(plat1.toString());
}

基本上,为了放置我的船,我想做一个for循环,并在for语句中定义的区间内的每个单元格中生成(更改它们的初始值)。 但我明白了:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
at Plateau.placerBateau(Plateau.java:39)
at BatailleNavale.main(BatailleNavale.java:6)

其中涉及以下代码行:

tabPlat[abs][ord] = true;

我明白它代表什么,但我不知道怎么会遇到这个问题。

PS - 我很抱歉我的英语。

2 个答案:

答案 0 :(得分:2)

错误在于:

ligne<ligne+this.longueur

您永远不会更改lignelongueur,直到它超出数组为止。

colonne<colonne+this.longueur

相同

答案 1 :(得分:1)

问题似乎在这里:

mysql> select * from test1 ;
+------+------+
| name | cost |
+------+------+
| EA   |  500 |
| SPSD |  475 |
| IA   |  450 |
| NST  |  450 |
| AAD  |  350 |
| ECOM |  325 |
+------+------+

select 
name,
cost from(
 select
 t1.*, 
 @rn:= if(@prev_cost = cost,@rn,@rn+1) as rn,
 @prev_cost:= cost 
 from test1 t1,(select @rn:=0,@prev_cost:=0)x
 order by cost desc 
)x
where x.rn <=3 ;

+------+------+
| name | cost |
+------+------+
| EA   |  500 |
| SPSD |  475 |
| IA   |  450 |
| NST  |  450 |
+------+------+

尝试删除public void placerBateau(int x, int y, boolean dir, int longueur){ int abs = this.x;//you are referring to instance variable instead of local parameter int ord = this.y;//same here 关键字。