这是我的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)));
答案 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。