【问题标题】:Better way to generate random numbers生成随机数的更好方法
【发布时间】:2013-03-26 03:12:27
【问题描述】:

一些随机数生成,想知道我是否可以使用循环来生成所有这些数字,而不是写出所有整数。还有比这更好的方法吗?我可以把它保持原样吗?

    public static int rx1 = 0+(int)(Math.random()*760);
public static int ry1 = 0+(int)(Math.random()*555);
public static int rx2 = 0+(int)(Math.random()*760);
public static int ry2 = 0+(int)(Math.random()*555);
public static int rx3 = 0+(int)(Math.random()*760);
public static int ry3 = 0+(int)(Math.random()*555);
public static int rx4 = 0+(int)(Math.random()*760);
public static int ry4 = 0+(int)(Math.random()*555);
public static int rx5 = 0+(int)(Math.random()*760);
public static int ry5 = 0+(int)(Math.random()*555);
public static int rx6 = 0+(int)(Math.random()*760);
public static int ry6 = 0+(int)(Math.random()*555);
public static int rx7 = 0+(int)(Math.random()*760);
public static int ry7 = 0+(int)(Math.random()*555);
public static int rx8 = 0+(int)(Math.random()*760);
public static int ry8 = 0+(int)(Math.random()*555);
public static int rx9 = 0+(int)(Math.random()*760);
public static int ry9 = 0+(int)(Math.random()*555);
public static int rx10 = 0+(int)(Math.random()*760);
public static int ry10 = 0+(int)(Math.random()*555);
public static int rx11 = 0+(int)(Math.random()*760);
public static int ry11 = 0+(int)(Math.random()*555);
public static int rx12 = 0+(int)(Math.random()*760);
public static int ry12 = 0+(int)(Math.random()*555);
public static int ry13 = 0+(int)(Math.random()*555);
public static int rx13 = 0+(int)(Math.random()*760);
public static int rx14 = 0+(int)(Math.random()*555);
public static int ry14 = 0+(int)(Math.random()*555);
public static int rx15 = 0+(int)(Math.random()*760);
public static int ry15 = 0+(int)(Math.random()*555);

public static int rx16 = 0+(int)(Math.random()*760);
public static int ry16 = 0+(int)(Math.random()*555);
public static int rx17 = 0+(int)(Math.random()*760);
public static int ry17 = 0+(int)(Math.random()*555);
public static int rx18 = 0+(int)(Math.random()*760);
public static int ry18 = 0+(int)(Math.random()*555);
public static int rx19 = 0+(int)(Math.random()*760);
public static int ry19 = 0+(int)(Math.random()*555);
public static int rx20 = 0+(int)(Math.random()*760);
public static int ry21 = 0+(int)(Math.random()*555);
public static int rx21 = 0+(int)(Math.random()*760);
public static int ry22 = 0+(int)(Math.random()*555);
public static int rx22 = 0+(int)(Math.random()*760);
public static int ry23 = 0+(int)(Math.random()*555);
public static int rx23 = 0+(int)(Math.random()*760);
public static int ry24 = 0+(int)(Math.random()*555);
public static int rx24 = 0+(int)(Math.random()*760);
public static int ry25 = 0+(int)(Math.random()*555);
public static int rx25 = 0+(int)(Math.random()*760);
public static int ry26 = 0+(int)(Math.random()*555);
public static int rx27 = 0+(int)(Math.random()*760);
public static int ry28 = 0+(int)(Math.random()*555);
public static int rx28 = 0+(int)(Math.random()*760);
public static int ry29 = 0+(int)(Math.random()*555);
public static int ry30 = 0+(int)(Math.random()*555);
public static int rx30 = 0+(int)(Math.random()*760);
public static int rx31 = 0+(int)(Math.random()*555);
public static int ry31 = 0+(int)(Math.random()*555);
public static int rx32 = 0+(int)(Math.random()*760);
public static int ry32 = 0+(int)(Math.random()*555);

【问题讨论】:

  • 当然你可以保持原样。该代码没有任何有用的工作。如果您描述了您想要实现的目标,我们可能会有更好的建议。
  • 你想做什么?
  • 标记为“slick”——为什么?
  • 不,这是唯一的方法。
  • 为什么需要这么多随机数来保存这么多随机变量?你是在向一些随机的人问一些随机的问题吗?

标签: java loops random integer


【解决方案1】:

我们可以简单地使用 java 的 random() 来做:

public static int[] x = new int[32];

public static int[] y = new int[32];

for(int i = 0; i

{

x[i] = (int)(Math.random()*760);

y[i] = (int)(Math.random()*555);

}

有关 Math.random() 的更多信息,可以点击链接http://www.w3schools.com/jsref/jsref_random.asp http://msdn.microsoft.com/en-us/library/ie/41336409(v=vs.94).aspx

【讨论】:

    【解决方案2】:

    您可以按照 here 的描述使用 Commons Math 来解决此问题

    例如,以下将使用当前时间(以毫秒为单位)作为 JDK PRNG 的种子,生成 50 个介于 1 和 1,000,000 之间的长整数的随机序列:

    RandomData randomData = new RandomDataImpl(); 
    for (int i = 0; i < 1000; i++) {
        value = randomData.nextLong(1, 1000000);
    }
    

    【讨论】:

      【解决方案3】:

      您可以将for(;;) 循环与ArrayList 一起使用。如果您想要固定数量的这些数字,问题并不清楚。

      import java.util.ArrayList;
      import java.lang.Math;
      public class Main{
      
          public static void main(String args[]){
              int n = 32; // No of random numbers requried for x and y
              ArrayList<Integer> randomNumbersListX = new ArrayList<Integer>();
              ArrayList<Integer> randomNumbersListY = new ArrayList<Integer>();
              for(int i=1; i<=n ; i++){
                   randomNumbersListX.add((int)(Math.random()*760));
                   randomNumbersListY.add((int)(Math.random()*555));
              }
               for(int i=0; i<randomNumbersListX.size() ; i++){
                  System.out.println("rx"+(i+1)+" "+randomNumbersListX.get(i));
                  System.out.println("ry"+(i+1)+" "+randomNumbersListY.get(i));
              }
          }
      }
      

      为了使变量乘以 1000 而不是 1000,您可以使用另一个 Math.random() 乘以 1000。所以 randomNumbersList.add((int)Math.random()*math.random()*1000); 将是解决方案。

      请看看这个Ideone snippet

      【讨论】:

      • 谢谢,我以前从未见过这样的做法。可以试试
      • 如何从这个列表中提取值?
      • 提取值可以使用另一个for循环。我会修改代码。
      【解决方案4】:

      这将是一种方法:

      public static final int RX_SIZE = 32;
      public static final int RY_SIZE = 32;
      public static int rx[] = new int[RX_SIZE];
      public static int ry[] = new int[RY_SIZE];
      
      static {
          for(int i = 0; i < RX_SIZE; i++) {
              rx[i] = 0+(int)(Math.random()*760);
          }
          for(int i = 0; i < RY_SIZE; i++) {
              ry[i] = 0+(int)(Math.random()*555);
          }
      }
      

      不过,这取决于您的具体需求。

      【讨论】:

      • 感谢您的回答,这对您有很大帮助。
      • 尝试学习如何制作代码块。我编辑了你对标准方法的回答。
      【解决方案5】:

      你可以使用一个数组来做同样的事情。这是示例程序

      package com.stackoverflow.test;
      
      public class RandomCheck {
      
          public static void main(String args[]) {
      
              int[] tempArray = new int[64];
      
              for (int i = 0; i < 64; i++) {
                  if (i % 2 == 0)
                      tempArray[i] = (int) (Math.random() * 760);
                  else
                      tempArray[i] = (int) (Math.random() * 555);
              }
      
              for (int i = 0; i < 64; i++) {
                  System.out.print(tempArray[i] + " , ");
              }
      
          }
      }
      

      【讨论】:

      • 你能解释一下为什么会有'if'和'else'语句吗?
      • if else 块用于确定要使用的乘数。
      【解决方案6】:

      只需将它们放在两个数组中:

      public static int[] x = new int[32];
      public static int[] y = new int[32];
      
      for(int i = 0; i < 32; i++)
      {
          x[i] = (int)(Math.random()*760);
          y[i] = (int)(Math.random()*555);
      }
      

      【讨论】:

        猜你喜欢
        • 2023-03-22
        • 2010-09-05
        • 1970-01-01
        • 2013-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多