gpt4 book ai didi

java - 加速大量 Random.nextint 调用

转载 作者:行者123 更新时间:2023-11-29 03:32:56 24 4
gpt4 key购买 nike

我正在从一个 tileset 中拼出一张 map 。作为其中的一部分,我有一种方法可以在绘制重要部分后使用依赖于随机地形的 BufferedImages 填充 map 的其余部分。 fillIn 方法有两个参数 - BufferedImages 的数组列表和整数的 ArrayList。整数的形式为,例如 90,92,94,96,98,100 并表示百分比 - 两个 ArrayList 的大小相同,该示例意味着第一个图 block 有 90% 的机会,2%第二个等等(实际上,您会在我的代码中注意到这也不是完美的工作。这不是问题,我知道如何解决它。只是还没有完成。)

map 是一千个方 block ,填充这张 map 的速度慢得令人无法接受。是否有任何加快速度的提示或技巧?真的,我希望它快得让人察觉不到。

考虑到复杂性,SSCE 最终不会很短,但 fillIn 方法的代码在下面,如果任何其他部分有用,请告诉我。

    private void fillIn (ArrayList<BufferedImage> b, ArrayList <Integer> r){
for (int i=0; i<FULLGRIDSIZE; i++){
for (int j=0; j<FULLGRIDSIZE; j++){
if (mapArray[i][j] ==null){
Random rand = new Random();
int random = rand.nextInt(100);
for (int loopVar =0 ;loopVar<r.size();loopVar++){
System.out.println(random +" "+ loopVar);
if (random < r.get(loopVar)){
mapArray[i][j] = b.get(loopVar);
break;
}
}
}
}
}
}

最佳答案

private void fillIn (ArrayList<BufferedImage> b, ArrayList <Integer> r){
Random rand = new Random();
for (int i=0; i<FULLGRIDSIZE; i++){
for (int j=0; j<FULLGRIDSIZE; j++){
if (mapArray[i][j] ==null){
// Random rand = new Random(); Don't create so many Randoms!
int random = rand.nextInt(100);
for (int loopVar =0 ;loopVar<r.size();loopVar++){
// System.out.println(random +" "+ loopVar);
// printlns take a surprisingly long time
if (random < r.get(loopVar)){
mapArray[i][j] = b.get(loopVar);
break;
}
}
}
}
}
}
  1. 您不需要每次循环都使用新的Random
  2. 不要 System.out.println。它会以惊人的速度降低您的代码速度。

关于java - 加速大量 Random.nextint 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17147763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com