2014-09-23 64 views
0

我有一个数组,可以容纳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

+0

尝试'ARR [K] = R *((数学。随机()> 0.5)?1:-1)'将随机添加到负面/正面。或者你可以移动随机区间的范围(Eran的回答) – Daniel 2014-09-23 11:43:40

回答

3

如果你想要-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

你可以产生0和20之间的随机数,并从它减去10。这样做,你wiil得到一个随机数-10和+10之间:

int r = (int) (Math.random() * 20) - 10; 
0

你只需要修改你的代码如下

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(); 
     } 

    }