Random.nextInt(1);只返回1

时间:2015-01-20 20:47:29

标签: java random minecraft

这是我的Minecraft mod算法。出于某种原因,似乎rand.nextInt(1);只返回1.为什么?

public void generate(){
    Random rand = new Random();
    Arrays.fill(wc,null);
    int c = generateCat();//Generates a int of 1-16 randomly
    int i = 0;
    int xi = 0;
    int x = getCoordX();
    int y = getCoordY();
    int maxc = 0;
    boolean d1 = true;
    boolean d2 = false;
    boolean d3 = false;
    boolean d4 = false;
    boolean loop = true;

    wc[0] = new WeatherChunk(world,x,y,c);//Here the starting object is generated
    x=x-1;
    if(rand.nextInt(1)==1){//Here the c value (is supposed to have a 50% chance of reducing) But it never does EVER!?
        c=getHNChunkCat(x,y);
        c--;
        wc[1] = new WeatherChunk(world,x,y,c);//Here the c value (is supposed to have a 50% chance of reducing) But it never does EVER!?
    }else{
        c=getHNChunkCat(x,y);
        wc[1] = new WeatherChunk(world,x,y,c);
    }
    x=x+2;
    if(rand.nextInt(1)==1){
        c=getHNChunkCat(x,y);
        c--;
        wc[2] = new WeatherChunk(world,x,y,c);
    }else{
        c=getHNChunkCat(x,y);
        wc[2] = new WeatherChunk(world,x,y,c);
    }
    x=x-1;
    y++;

    if(rand.nextInt(1)==1){
        c=getHNChunkCat(x,y);
        c--;
        wc[3] = new WeatherChunk(world,x,y,c);
    }else{
        c=getHNChunkCat(x,y);
        wc[3] = new WeatherChunk(world,x,y,c);
    }
    y=y-2;
    if(rand.nextInt(1)==1){
        c=getHNChunkCat(x,y);
        c--;
        wc[4] = new WeatherChunk(world,x,y,c);
    }else{
        c=getHNChunkCat(x,y);
        wc[4] = new WeatherChunk(world,x,y,c);
    }
    y=wc[0].coordY;
    x=wc[0].coordX-2;
    i=5;

    while(loop){
                d1=true;
                while(d1){
                    if(chunkExists(x+1,y)){
                        if(getHNChunkCat(x,y)>maxc)maxc=getHNChunkCat(x,y);
                        if(rand.nextInt(1)==1){
                            c=getHNChunkCat(x,y);
                            c--;
                            wc[i] = new WeatherChunk(world,x,y,c);
                        }else{
                            c=getHNChunkCat(x,y);
                            wc[i] = new WeatherChunk(world,x,y,c);
                        }
                        x++;
                        y++;
                        i++;
                    }else{
                        d1=false;
                    }   
                }
                d2=true;
                while(d2){
                    if(chunkExists(x,y-1)){
                        if(getHNChunkCat(x,y)>maxc)maxc=getHNChunkCat(x,y);
                        if(rand.nextInt(1)==1){
                            c=getHNChunkCat(x,y);
                            c--;
                            wc[i] = new WeatherChunk(world,x,y,c);
                        }else{
                            c=getHNChunkCat(x,y);
                            wc[i] = new WeatherChunk(world,x,y,c);
                        }
                        x++;
                        y--;
                        i++;
                    }else{
                        d2=false;
                    }   
                }
                d3=true;
                while(d3){
                    if(chunkExists(x-1,y)){
                        if(getHNChunkCat(x,y)>maxc)maxc=getHNChunkCat(x,y);
                        if(rand.nextInt(1)==1){
                            c=getHNChunkCat(x,y);
                            c--;
                            wc[i] = new WeatherChunk(world,x,y,c);
                        }else{
                            c=getHNChunkCat(x,y);
                            wc[i] = new WeatherChunk(world,x,y,c);
                        }
                        x--;
                        y--;
                        i++;
                    }else{
                        d3=false;
                    }   
                }
                d4=true;
                while(d4){

                    if(chunkExists(x-1,y)){
                        if(getHNChunkCat(x,y)>maxc)maxc=getHNChunkCat(x,y);
                        if(rand.nextInt(1)==1){
                            c=getHNChunkCat(x,y);
                            c--;
                            wc[i] = new WeatherChunk(world,x,y,c);
                        }else{
                            c=getHNChunkCat(x,y);
                            wc[i] = new WeatherChunk(world,x,y,c);
                        }
                        x--;
                        y++;
                        i++;
                        if(chunkExists(x,y)){
                        d4=false;
                        break;
                    }
                    }else{
                        d4=false;
                    }   
                }

                y=wc[0].coordY;
                x=wc[0].coordX;
                xi=0;

                while(true){
                    if(!chunkExists(x-xi,y)){
                        x=x-xi;
                        break;
                    }else{
                        xi++;
                    }
                }

                if(maxc==0){
                    loop=false;
                }
    }

    cleanChunks();
    WEATHER.addChunkArray(wc2);

}

我也试过

 wc[1] = new WeatherChunk(world,x,y,(getHNChunkCat()-rand.nextInt(1)));

2 个答案:

答案 0 :(得分:10)

您没有进行足够的调试,因为这是不可能的。确实,您只会收到一个值,但它是0,而不是1

来自the docs

  

返回伪随机,均匀分布的int值介于0(含)和指定值(独占

之间

如果您想要50%的机会,我建议您将其转为nextInt(2)或@ Flynn1179建议:nextBoolean()

答案 1 :(得分:2)

您是否尝试在0和1之间获得小数?使用此:

Math.random() // returns a random double

nextInt方法只返回0和指定参数之间的随机数,但不包括参数。因此,你应该总是得到0。