【问题标题】:SOS: Battleship Java (for statement & array dimensions)SOS:Battleship Java(用于语句和数组维度)
【发布时间】:2015-08-17 08:44:46
【问题描述】:

人! 所以,我正在尝试用 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 - 我对我的英语感到非常抱歉。

【问题讨论】:

  • 什么是lignecolonne
  • 这是 Java 而不是 C++ :) 只需使用 boolean [][] tabPlat = new boolean [5][5] 创建数组;它会用假填充数组。 :)
  • 共有三个变量lignecolonnelongueur。为了提供帮助,我们需要知道它们的初始化位置和方式。
  • 如果您使用调试器逐步解决此问题,您会立即发现问题。

标签: java arrays for-loop indexing


【解决方案1】:

问题似乎在这里:

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

尝试删除 this 关键字。

【讨论】:

  • 这似乎是故意的。
  • 我不认为这是故意或正确的。但这与导致 ArrayIndexOutOfBoundsException 的问题不同。
  • 这可能会解决不同的问题,但不能解决导致错误的问题
【解决方案2】:

错误在这里:

ligne<ligne+this.longueur

您永远不会更改 lignelongueur,因此它会一直持续到超出数组为止。

colonne&lt;colonne+this.longueur 也一样

【讨论】:

    猜你喜欢
    • 2014-11-27
    • 1970-01-01
    • 2018-02-18
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多