【问题标题】:Generate a random number and add 0 before it to ensure fixed number of digits生成一个随机数并在其前加0以确保位数固定
【发布时间】:2015-09-21 10:58:41
【问题描述】:

所以我正在尝试生成一个随机数。我将在随机数之前附加日期和月份作为整数。我可以使用以下代码来做到这一点。

    Calendar calendar;
    calendar=Calendar.getInstance();
    int day= calendar.get(Calendar.DAY_OF_MONTH);
    int month=calendar.get(Calendar.MONTH)+1; //it treats Jan as 0 hence i add 1
    int num= Integer.valueOf(String.valueOf(month)+String.valueOf(day));

现在我需要生成一个随机数,但在它之前添加 0。例如,今天是 9 月 21 日,所以数字看起来像

    921 (num) + 22334 (random num) = 92122334
    921 (num) + 2 (random num) = 92100002

基本上在开头添加 0 以确保位数保持不变。这个用例是一种更简单的方法来生成具有内置时间戳的唯一订单号。我不希望每天处理超过 200 个订单,因此采用 5 位随机数似乎足够合理,因为重复的概率非常小。

【问题讨论】:

  • 你不能在整数前面加上 0,你需要把它存储在一个字符串中才能做到这一点
  • 是的,默认情况下,数字左侧的 0 被忽略。那么我该怎么做呢?我想不出一个有效的方法
  • 不可能,使用字符串
  • 所以我需要一个 for() 循环将“0”连接到数字?
  • 我想说的是:在正确的、面向对象的设计中,您可以而且应该为不同的“事物”使用不同的类型。当对您的订单号的要求在某个时候发生变化时会发生什么;一个简单的 int 不会再这样做了?快乐地修改你的代码。关键是:如果你只是使用纯数字或字符串来实现你的业务逻辑;然后你传播关于你的订单号的基本知识的知识。但它应该放在一个中心的地方。

标签: java android random


【解决方案1】:

两种可能的解决方案。

Calendar calendar = GregorianCalendar.getInstance();
int num = 0;
num += (calendar.get(Calendar.MONTH) + 1) * 10_000_000;
num += calendar.get(Calendar.DAY_OF_MONTH) * 100_000;
num += your_random_number_lower_100000

Calendar calendar = GregorianCalendar.getInstance();
String randomDigits = String.format("%d%02d%05d", 
        calendar.get(Calendar.MONTH) + 1,
        calendar.get(Calendar.DAY_OF_MONTH),
        your_random_number_lower_100000
);

【讨论】:

    【解决方案2】:

    可以使用String格式:

    String finalString = String.format("%d%05d", num, randomNum);
    

    这里你可以传递第一个参数,你计算的日期和月份,第二个参数得到的随机数。

    %05d 表示:如果您的整数位数小于 5,那么它将附加 0(零)以使数字为 5 位数。

    【讨论】:

      【解决方案3】:

      怎么样

      int newnumber = 921*100000 + 2;
      

      给出 92100002。当然,您可以使用任何随机数代替 2。 如果您想在 921 前面添加零,使其变为 0921,例如,对于 0901 年 9 月 1 日,您需要将其转换为字符串并检查长度,然后添加零直到获得所需的长度。

      【讨论】:

        【解决方案4】:

        你可以通过这种方式构造一个String

         String value = String.valueOf(randomNum); //your random num should have 5 digits or less
         int N = 5; //your length
         while (value.length < N)
           value = "0" + value;
        

        【讨论】:

          【解决方案5】:

          如果您要将其存储为字符串(您似乎已经在这样做了,因为您正在添加 921 和 22334 并获得 92122334?)最简单的方法是将 0 添加到字符串的开头,直到它到达一定长度。

          StringBuilder numberString = new StringBuilder(maxSize); numberString.append(yourNumber);

          while(numberString.length() < maxSize) numberString.insert('0');

          【讨论】:

            猜你喜欢
            • 2018-04-03
            • 1970-01-01
            • 2023-03-28
            • 2011-08-09
            • 2020-11-19
            • 2011-06-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多