繁体   English   中英

JAVA - 使用Math.random()生成5位数代码

[英]JAVA - Generate 5 digits code using Math.random()

我正在编写一个简短的程序,能够生成与0-9,az,AZ混合的5位数代码。

这是我的代码:

import java.util.*;

public class FiveDigitsRandom
{

public static void main(String[] args)
{
  new FiveDigitsRandom().use();
 }

public void use()
{
char choice;
while((choice=readChar()) != 'x')
{
    switch(choice)
    {
        case'n': 
        generateAll();
        break;
    }
  }
}

public char readChar()
{
 System.out.print("Please choose n/x: ");
 Scanner scanner = new Scanner(System.in);
 return scanner.nextLine().charAt(0);
 }

public void generateAll()
{
 String[]code = new String[5];
 for(int i=0; i<code.length; i++)
 {
     int random = generate0_2();
     switch(random)
     {
     case 0: 
         code[i] = generate0_9();
         break;
     case 1:
         code[i] = generate_a_z();
         break;
     case 2:
         code[i] = generate_A_Z();
         break;
     }
   }
 for(int j=0; j<code.length; j++)
 {
     System.out.print(code[j]);
 }
 System.out.println(" ");
 }

public int generate0_2()
{
 return (int)Math.random()*3;
 }

public String generate0_9()
{
 int a = (int)(Math.random() * 10);
 String AA = Integer.toString(a);
 return AA;
 }

public String generate_a_z()
{
 char a = (char)((int)'a'+ Math.random() * ((int)'z' - (int)'a' + 1));
 String AA = Character.toString(a);
 return AA;
 }

public String generate_A_Z()
{
 char a = (char)((int)'A'+ Math.random() * ((int)'Z' - (int)'A' + 1));
 String AA = Character.toString(a);
 return AA;
 }
}

它假设生成一个随机码为0AzhG,Hg78N。 但现在我只能有5位数字,随机数为0-9。 请告诉我我的代码在哪里出错? 谢谢!

你的generate0_2方法是错误的。

public int generate0_2()
{
    return (int)Math.random()*3;
}

当你将它转换为int时,它的工作方式类似于((int)Math.random)* 3,这意味着它每次都提供0。

改为

public int generate0_2()
{
    return (int)(Math.random()*3);
}

你遇到的一个问题是你的分配不均匀。 即个别数字比单个字母更可能。 一种均匀分布的方法是你有一个偶数功能。

public static char randomChar() {
    // random.nextInt(62) would be faster.
    int n = (int) (Math.random() * 62);
    if (n < 10) return (char) ('0' + n);
    n -= 10;
    if (n < 26) return (char) ('A' + n);
    n -= 26;
    return (char) ('a' + n);
}

public static String randomString(int length) {
    char[] chars = new char[length];
    for (int i = 0; i < length; i++)
        char[i] = randomChar();
    return new String(chars);
}

也许使用RandomStringUtils很容易

import org.apache.commons.lang3.RandomStringUtils;

class Main {
    public static void main(String[] args) {
        // Prints only A-Z, a-z, 0-9
        System.out.println(RandomStringUtils.randomAlphabetic(5));
        // Prints only A-Z, a-z
        System.out.println(RandomStringUtils.randomAlphanumeric(5));
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM