Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 两点之间的随机位置(x1、z1、x2、z2)_Java_Random_Plugins_Numbers_Minecraft - Fatal编程技术网

Java 两点之间的随机位置(x1、z1、x2、z2)

Java 两点之间的随机位置(x1、z1、x2、z2),java,random,plugins,numbers,minecraft,Java,Random,Plugins,Numbers,Minecraft,我正在为Minecraft服务器制作一个插件,让玩家选择两个位置(x1,z1(第一个位置):x2,z2(第二个位置)),并允许他们在两个点之间设置这个区域(矩形/正方形),以便随机将它们传送到给定位置的任何位置 为了简单起见,我将省略大部分代码,只给出我遇到问题的部分。下面的代码将(在玩家加入服务器时)将他们传送到该区域内 我在nextInt()中设置了一些虚拟数据,以便您理解数学 Location 1 (x1, z1): -424, 2888 Location 2 (x2, z2): 4248

我正在为Minecraft服务器制作一个插件,让玩家选择两个位置(x1,z1(第一个位置):x2,z2(第二个位置)),并允许他们在两个点之间设置这个区域(矩形/正方形),以便随机将它们传送到给定位置的任何位置

为了简单起见,我将省略大部分代码,只给出我遇到问题的部分。下面的代码将(在玩家加入服务器时)将他们传送到该区域内

我在
nextInt()
中设置了一些虚拟数据,以便您理解数学

Location 1 (x1, z1): -424, 2888
Location 2 (x2, z2): 4248, 3016
以上是以下程序段中的位置。(将“
z
”视为图形上的“
y
”)

问题是,有时一个(或两个)位置具有负值。我尝试了很多不同的方法来计算这些数字,但是我被难住了

问题: 有没有办法让Java在两个给定值之间选择一个随机数

例如:

randomLocation.nextInt(x1, x2);
randomLocation.nextInt(z1, z2);

确定随机坐标的代码有错误:

x = randLocation.nextInt(((2888 - 424) + 1) + 424);
z = randLocation.nextInt(((4248 - 3016) + 1) + 3016);  
当您应该使用
x1
x2
时,您正在使用
x1
z1
确定新的
x
位置:

randX = randLocation.nextInt(Math.abs(x2-x1) + 1) + Math.min(x1,x2);
randZ = randLocation.nextInt(Math.abs(z2-z1) + 1) + Math.min(z1,z2);
还有一件事:它应该是这样的:假设x2>x1和z2>z1

x = randLocation.nextInt((x2 - x1) + 1) + x1;
z = randLocation.nextInt((z2 - z1) + 1) + z1;

是的,我看过了,但没用。正如你所看到的,我采用了一种答案方法,但无法使其工作。始终返回正数。你需要更清楚地解释你的问题与那一个有什么不同,并给我们更多关于这个问题的信息。(您向我们展示的代码不会产生负数,因为
nextInt
不会返回负数。)请看。x2不会总是大于x1,与z2和z1一样。我知道。这就是为什么我说我是这么想的。Maljam的答案是完美的解决了它。你能解释一下除了改变我使用变量的方式之外你做了什么吗?只有一个问题:为什么z位置如此紧密地在一起?这个想法是新值将有一个最小值
Math.min(x1,x2)
,并且最多可以
Math.abs(x2-x1)+1
。因此,您只需将最小值添加到介于0和最大范围之间的随机数。如果两个位置都远远超过0会怎么样?@LoganButler random并不意味着数据总是均匀分布的!你应该打几百个电话,然后把它们画出来,看看是否有偏差,而不是6个!是的,如果位置远远超过0也没关系。
x = randLocation.nextInt((2888 - 424) + 1) + 424;
z = randLocation.nextInt((4248 - 3016) + 1) + 3016;
x = randLocation.nextInt((x2 - x1) + 1) + x1;
z = randLocation.nextInt((z2 - z1) + 1) + z1;