随机字符和数字生成器不能按我想要的方式工作

时间:2017-12-23 15:33:39

标签: java random

  import java.util.Random;
  public class Test {
        public static void main(String[] args) {
            randomIDGenerator();
        }

     public static String randomIDGenerator() {
        Random r = new Random();

        char a = 0;
        for (int i = 0; i < 3; i++) {
             a = (char) (r.nextInt(26) + 'a');
        }
        int b = 0;
        for (int j = 0; j < 2; j++) {
            b = r.nextInt(10);
        }
        String h = "" + b;
        String n = a + h;

        System.out.println(n);
         return n;
      }
 }

我正在用Java编写代码,我想要输出从a到z的3个字符和从0到9的2个数字(例如abc01),但程序给我1个字符和1个数字(例如a1)。尽管我已经将3和2放入循环中,为什​​么程序会这样做呢?据我所知,第一个循环必须运行3次,第二个循环必须运行2次。所以最后我的输出必须是3个字符和2个数字。谢谢!

2 个答案:

答案 0 :(得分:1)

charint可以存储一个值,因此请使用String

  String a = "";
    for (int i = 0; i < 3; i++) {
         a += (char) (r.nextInt(26) + 'a');
    }
    for (int j = 0; j < 2; j++) {
        a += r.nextInt(10);
    }
    return a;

答案 1 :(得分:1)

您可以正确生成随机项,但不能以正确的方式收集结果。循环的每次迭代都会在先前迭代的结果上进行写入,同时将ab都包含在最后一次迭代的结果中。

我建议您在生成字符时使用StringBuilder来存储字符:

Random r = new Random();
StringBuilder res = new StringBuilder();
for (int i = 0; i < 3; i++) {
     res.append((char)(r.nextInt(26) + 'a'));
}
for (int j = 0; j < 2; j++) {
    res.append(r.nextInt(10)); // You could use the same trick with '0'
}
System.out.println(res);

Demo.