提前道歉,我是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);
}
答案 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
}
}