如何获得可以为正值或负值的随机值?
问题描述:
我有一个数组,可以容纳5个整数。在for循环中,我使用Math.random()来填充数组0到10之间的随机整数值,可以是正数也可以是负数。我怎样才能收到负面的价值?有人建议我乘以公式-1来填充具有正值和负值的数组,但是当我这样做时,数组中的所有值都是负数。我认为这个问题是在这条线如何获得可以为正值或负值的随机值?
int r = 0 + (int) (Math.random() * 10 *(-1));
这是代码:
public class Random
{
public static void main(String [] args)
{
int [] arr= new int[5];
for(int k=0; k<arr.length; k++)
{
int r = 0 + (int) (Math.random() * 10 *(-1));
arr[k] = r;
}
int j = 0;
while(i<arr.length) {
System.out.print(arr[i] + " ");
j++;
}
}
}
现在我的输出为-7 -3 -3 -5 -6
我想我的输出是7 -3 3 -5 6
答
如果你想要-10和10之间的数字:
int r = (int) (Math.random() * 21) - 10;
由于Math.random()
永远不会返回1.0,(int) (Math.random() * 21)
将0到20之间返回整数,并从其减去10后,你会得到你想要的。
一种替代方法是使用java.util.Random
:
Random rand = new Random();
int r = rand.nextInt(21) - 10;
+0
可能应该使用Math.round而不是总是四舍五入(铸造为int) – ControlAltDel 2014-09-23 11:45:03
答
你可以产生0和20之间的随机数,并从它减去10。这样做,你wiil得到一个随机数-10和+10之间:
int r = (int) (Math.random() * 20) - 10;
答
你只需要修改你的代码如下
public class Random
{
public static void main(String[] args) {
int[] arr = new int[5];
for(int k=0; k<arr.length; k++)
{
int r = 0 +(int)(Math.random()*10*(k % 2 == 0? 1:-1));
arr[k] = r;
}
int j = 0;
while(j<arr.length)
{
System.out.print(arr[j]+ " ");
j++;
}
System.out.println();
}
}
尝试'ARR [K] = R *((数学。随机()> 0.5)?1:-1)'将随机添加到负面/正面。或者你可以移动随机区间的范围(Eran的回答) – Daniel 2014-09-23 11:43:40