Java 有没有办法设置列表的最大大小?

Java 有没有办法设置列表的最大大小?,java,Java,我正在寻找以下问题的帮助。这不是我的原始代码,我对Java非常陌生,所以我可能遗漏了一些明显的东西 代码在我的游戏中产生了一些效果,但是似乎没有任何关于产生多少效果的上限。有没有办法将效果的上限值限制为某个整数值?说20?或者我可以把这个值设为20到30之间的随机整数吗 我一直试图限制列表大小的上限,但似乎不起作用 如有任何建议,我们将不胜感激 我还尝试将(int j=0;j

我正在寻找以下问题的帮助。这不是我的原始代码,我对Java非常陌生,所以我可能遗漏了一些明显的东西

代码在我的游戏中产生了一些效果,但是似乎没有任何关于产生多少效果的上限。有没有办法将效果的上限值限制为某个整数值?说20?或者我可以把这个值设为20到30之间的随机整数吗

我一直试图限制列表大小的上限,但似乎不起作用

如有任何建议,我们将不胜感激

我还尝试将(int j=0;j值调整为类似(int j=0;j<20;j++)的
,但这似乎也没有效果,效果会像以前一样产生

我还尝试删除
inti=list.size()
Actor=(Actor)list.get(j)
这样代码就只依赖于
for
循环,但代码不会编译:它似乎需要代码
Actor=(Actor)list.get(j)。我收到一个
无法解析符号的错误,原因如下:

symbol  : class pos  
location: package actor
            if(!flag && actor.pos.getAbsPoint().distance(point3d) < 10000D && (actor instanceof TypeBomber) && actor.getArmy() != myArmy)

symbol  : variable actor  
location: class com.maddox.il2.objects.vehicles.stationary.CandC$FireUnit
            if(!flag && actor.pos.getAbsPoint().distance(point3d) < 10000D && (actor instanceof TypeBomber) && actor.getArmy() != myArmy)

symbol  : variable actor  
location: class com.maddox.il2.objects.vehicles.stationary.CandC$FireUnit
            if(!flag && actor.pos.getAbsPoint().distance(point3d) < 10000D && (actor instanceof TypeBomber) && actor.getArmy() != myArmy)



public boolean danger()
{
    boolean flag = false;
    Point3d point3d = new Point3d();
    pos.getAbs(point3d);
    List list = Engine.targets();
    World.MaxVisualDistance = 50000F;
    int i = list.size();
    for(int j = 0; j < i; j++)
    {
        Actor actor = (Actor)list.get(j);
        if(!flag && actor.pos.getAbsPoint().distance(point3d) < 10000D && (actor instanceof TypeBomber) && actor.getArmy() != myArmy)
        {
            Random random = new Random();
            int k = random.nextInt(500);
            int l = k - 250;
            k = random.nextInt(500);
            int i1 = k - 250;
            Eff3DActor.New(this, null, new Loc(l, i1, 0.0D, 0.0F, 90F, 0.0F), 1.0F, "Effects/Smokes/CityFire.eff", 600F);
            flag = true;
            int j1 = random.nextInt(10);
            wait = (float)(1.0D + (double)j1 * 0.10000000000000001D);
        }
    }
符号:类别位置
位置:包参与者
如果(!flag&&actor.pos.getAbsPoint().distance(point3d)<10000D&&actor实例of TypeBomber)&&actor.getArmy()!=myArmy)
符号:可变演员
位置:class com.maddox.il2.objects.vehicles.stational.CandC$firefunit
如果(!flag&&actor.pos.getAbsPoint().distance(point3d)<10000D&&actor实例of TypeBomber)&&actor.getArmy()!=myArmy)
符号:可变演员
位置:class com.maddox.il2.objects.vehicles.stational.CandC$firefunit
如果(!flag&&actor.pos.getAbsPoint().distance(point3d)<10000D&&actor实例of TypeBomber)&&actor.getArmy()!=myArmy)
公共布尔危险()
{
布尔标志=假;
Point3d Point3d=新的Point3d();
位置getAbs(点3D);
List=Engine.targets();
World.MaxVisualDistance=50000F;
int i=list.size();
对于(int j=0;j

谢谢您的帮助。如我所说,如果我遗漏了一些明显的内容,我很抱歉。

直接使用
list.size()
而不是将其传递给I。它将返回列表中包含的对象数。
您还可以使用
迭代器
列表迭代器
对列表元素进行迭代,因为使用这些元素会更容易。 例如:-

Actor actor;   //It would be better if you create variable here and use the same variable for different objects.
Iterator iter = list.iterator();
while(iter.hasNext()){
    actor = (Actor)iter.next(); 
    ....//Rest of the code
}

我不能确定所有这些代码都在做什么,但是,看起来您的函数实际返回的标志超过了您粘贴的点?而且,参与者列表的大小似乎是可以产生多少烟雾效果的上限(受通过if语句的次数限制)。也就是说,我会尝试类似的方法(为了保留功能的其余部分)

正如我前面所说,我的Java有点生锈,我只是在编辑窗口中模拟了它;因此,如果它不能“开箱即用”,我深表歉意


另外,作为补充说明,您可能有多个线程运行调用函数,这些函数可以访问。因此,您可能希望查看Java中的同步关键字…

我将回答关于是否可以为列表设置最大值的问题。希望这将帮助您更好地了解Java:)

通常,的实现没有最大大小,您始终可以在其末尾添加更多元素。 为了解决这个问题,可以使用Actor的原始数组:

private static final int MAX_NUMBER_OF_ACTORS = 20
Actor[] actors = new Actor[MAX_NUMBER_OF_ACTORS];
也就是说,我鼓励您使用List接口通过其各种实现提供给您的功能。例如,使用Arraylist及其add方法:

public class ActorList extends ArrayList<Actor> {
    private static final int MAX_NUMBER_OF_ACTORS = 20
    @Override
    public boolean add(Store s) {
        boolean result = false;
        if (this.size() <= MAX_NUMBER_OF_ACTORS){
            result = super.add(s);
        }else{
            // Notify number maximum of actors have been reached (logging, whatever processing you want here...)
        }
        return result;
    }
}
公共类ActorList扩展了ArrayList{
私有静态最终整数最大演员数=20
@凌驾
公共布尔添加(存储){
布尔结果=假;

如果(this.size(),为什么不将
maxActors
设置为任意数,并在生成时增加一个本地
counter
。一旦
counter==maxActors
,就会中断循环。为什么“for(int j=0;j<20;j++)”似乎没有效果?您将循环计数限制为20,而不是列表的大小(希望列表中至少包含20项)。这似乎是正确的。不知道为什么“for(int j=0;j<20;j++)”看起来不起作用,它只是像以前一样运行。“为什么不将maxActors设置为任意数,并在生成时增加一个本地计数器。一旦计数器==maxActors,就中断循环。”你能再举一个例子吗?你能举一个例子如何实现它,比如说20次迭代吗?我有点不知道怎么做。@user2558274不管有多少次迭代,使用我上面给出的例子,而不是循环,只需复制并粘贴你的其他代码。它会起作用,在您程序的状态。谢谢,我会试试并报告回来。多谢,我会尝试报告回来。正如您所说,虽然这是一个游戏,但我相信该函数可能会被非常常规地调用,我会尝试您建议的方法,看看它是否有效。@user2558274您也可以尝试注释掉Eff3DActor行。新建…以确保你在咆哮
SmokeCountSingleton.getInstance().canCreate()
SmokeCountSingleton.getInstance().didCreate(someDurationValue)
private static final int MAX_NUMBER_OF_ACTORS = 20
Actor[] actors = new Actor[MAX_NUMBER_OF_ACTORS];
public class ActorList extends ArrayList<Actor> {
    private static final int MAX_NUMBER_OF_ACTORS = 20
    @Override
    public boolean add(Store s) {
        boolean result = false;
        if (this.size() <= MAX_NUMBER_OF_ACTORS){
            result = super.add(s);
        }else{
            // Notify number maximum of actors have been reached (logging, whatever processing you want here...)
        }
        return result;
    }
}