【问题标题】:Java NullPointerException with objects in arrayJava NullPointerException 与数组中的对象
【发布时间】:2015-01-06 13:41:12
【问题描述】:

我是 Java 新手,在这行代码中遇到 NullPointerException 错误:

spielfeld[i][j] = new DominionTile(world,i,j); // last function

这是整个程序代码:

public class MapProvider implements ....... {
private DominionTile[][] spielfeld;

int row;
int col;
public MapProvider(int zahl1, int zahl2) {
    DominionTile[][] spielfeld = new DominionTile[zahl1][zahl2];
    col = zahl1;
    row = zahl2;
}

@Override
public MapTile[] getColumn(int spalte) { // DONE
    if ((spalte < 0) && (spalte > col) ) {
        return null;
    }
    else {
        return spielfeld[spalte]; 
    }
}

@Override
public int getColumns() { // DONE
    return col;
}

@Override
public int getRows() { // DONE
    return row;
}

@Override
public boolean isValid(int spalte, int zeile) { // DONE
    if ((spalte < 0) && (zeile < 0)) {
        return false;
    }
    else if ((spalte > col) && (zeile > row)) {
        return false;
    }
    else {
        return true; 
    }
}

@Override
public DominionTile getTile(int col, int row) { // DONE
    return spielfeld[col][row]; 
}

@Override
public void setupMapTiles(MapWorld world) { // NICHT FERTIG
    final Map karte = world.getMap();
    int zeilen = karte.getRows();
    int spalten = karte.getColumns();
    for (int i = 1; i <= spalten; i++) { // I-TE SPALTE
        for (int j = 1; j <= zeilen; j++) { // J-TE ZEILE
            spielfeld[i][j] = new DominionTile(world,i,j);
            //DominionTile neu = new DominionTile(world, i, j);
            //spielfeld[i][j] = (DominionTile)neu;
        }
    }
}

}

最后一个函数应该在数组的每个位置放置一个 DominionTile。我做错了什么?

【问题讨论】:

  • 你能复制堆栈跟踪吗?
  • 你能附加异常的堆栈跟踪吗?
  • DominionTile(world,i,j) 构造函数在哪里定义。你也可以发布代码吗?
  • 您的数组索引为 0。不要从1 开始一直到&lt;=,而是尝试0&lt;

标签: java arrays object nullpointerexception


【解决方案1】:

你的构造函数中有这个。这声明并分配给一个局部变量,而不是 spielfeld 字段,因此该字段留下了一个 null 值。

DominionTile[][] spielfeld = new DominionTile[zahl1][zahl2];

你可能想要:

public MapProvider(int zahl1, int zahl2) {
    spielfeld = new DominionTile[zahl1][zahl2];
    col = zahl1;
    row = zahl2;
}

即没有类型声明,它将分配给对象的字段。

【讨论】:

    【解决方案2】:

    作为起点,您可能希望打印出 zeilen 和 spalten 的值。我猜这是由访问 spielfeld[i][j] 引起的,而 spielfeld[i] 本来就不存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-21
      • 1970-01-01
      相关资源
      最近更新 更多