从ArrayList项中检索数据

时间:2015-04-01 11:50:44

标签: java arraylist

提前道歉,我是Java新手,我大部分时间都在使用别人的代码,所以请耐心等待。我环顾四周但找不到任何可以解决我的问题

我从一个方法中检索了一个ArrayList,然后我尝试编写一个foreach循环来从下面的“观察”中检索一个特定的数据。

无论出于何种原因,当通过ArrayList访问时,它都不允许我检索存储在观察中的任何数据。

    ArrayList<Observation>[] npcPositions = stateObs.getNPCPositions();
    Vector2d playerPosition = stateObs.getAvatarPosition();

    int npcCount = npcPositions.length;

    for (int i = 0; i <= npcCount; i++)
    {

        if (playerPosition.x == npcPositions[i].position)
        {

        }
    }

位置是观察中的值,但我得到的错误是无法解析或不是字段。观察类的一部分在下面,我无法访问我正在做的事情中的任何变量。

public class Observation implements Comparable<Observation>
{

/**
 * Category of this observation (static, resource, npc, etc.).
 */
public int category;

/**
 * Type of sprite of this observation.
 */
public int itype;

/**
 * unique ID for this observation
 */
public int obsID;

/**
 * Position of the observation.
 */
public Vector2d position;

/**
 * Reference to the position used for comparing this
 * observation with others.
 */
public Vector2d reference;

那么我需要使用什么来访问这些变量。我注意到当我想存储来自stateObs.getNPCPositions的数据时我必须使用[],这似乎是为什么其他示例对我不起作用但我不确定如何解决它。

更新

原始问题似乎是固定的,但是当试图检索ArrayList的长度时,我得到nullpointerexception。如何在每次循环中获得能够通过它们运行的​​项目数。

更新#2

    /**
 * Returns a list of observations of NPC in the game. As there can be
 * NPCs of different type, each entry in the array corresponds to a sprite type.
 * Every ArrayList contains a list of objects of type Observation.
 * Each Observation holds the position, unique id and
 * sprite id of that particular sprite.
 *
 * @return Observations of NPCs in the game.
 */
public ArrayList<Observation>[] getNPCPositions()
{
    return model.getNPCPositions(null);
}


/**
 * Returns a list of observations of NPC in the game. As there can be
 * NPCs of different type, each entry in the array corresponds to a sprite type.
 * Every ArrayList contains a list of objects of type Observation, ordered asc. by
 * distance to the reference passed. Each Observation holds the position, sprite type id and
 * sprite id of that particular sprite.
 *
 * @param reference   Reference position to use when sorting this array,
 *                    by ascending distance to this point.
 * @return Observations of NPCs in the game.
 */
public ArrayList<Observation>[] getNPCPositions(Vector2d reference)
{
    return model.getNPCPositions(reference);
}

3 个答案:

答案 0 :(得分:1)

排队:

npcPositions[i].position

ArrayList的数组,其中没有任何属性position。可能你会尝试:

npcPositions[i].get(0).position

<强>编辑:

正如你所说,这条线给了NPE:

int npcCount = npcPositions.length;// possibly npcPositions is null

执行以下行以获取数组列表:

public ArrayList<Observation>[] getNPCPositions()
{
    return model.getNPCPositions(null);//<-- note this, possibly model is also null
}

答案 1 :(得分:1)

此:

ArrayList<Observation>[] npcPositions = stateObs.getNPCPositions();

获得ArrayList的数组。您可以使用以下命令从数组的索引ArrayList获取单个i

ArrayList<Observation> list = npcPositions[i];

您可以使用以下网址获取列表索引Observation的{​​{1}}:

j

或者您可以组合使用它们:

Observation obs = list.get(j);

答案 2 :(得分:0)

我不确定你在代码的前两行中做了什么,但是假设你正在做的事情是正确的,那么问题在于你的if语句。您正在尝试测试Vector2D.x是否等于永远不会发生的Vector2D。试着这样做

for(int i = 0; i < npcCount; < i++)
{

 if(playerPosition == npcPositions.get(i).position)
    {
      //do something here
    }
 }

或者你可以试试这个

 for(int i = 0; i < npcCount; < i++)
{

 if(playerPosition.x == npcPositions.get(i).position.x)
    {
      //do something here
    }
 }