Java单方法实现:生成10个单字符重复的随机长度名称
修正Java方法生成单重复字符的随机名称
原代码问题分析
你的代码目前存在几个关键问题,导致无法生成目标格式的字符串:
- 每次循环都新建
Random实例,会降低随机性且没必要 - 用长度变量
aLengthVariable去索引alpha字符串选字符,这会限制只能取alpha的第3到第9位字符(因为长度范围是3-10),不是随机选任意小写字母 - 直接拼接字符和长度输出,没有生成重复字符的字符串
修正后的代码
import java.util.Random; public class RandomNameGenerator { public static void task() { final String alpha = "abcdefghijklmnopqrstuvwxyz"; final int max = 10; final int min = 3; // 只初始化一次Random实例,提升随机性和性能 Random random = new Random(); for (int n = 0; n < 10; n++) { // 随机选择一个小写字母 char randomChar = alpha.charAt(random.nextInt(alpha.length())); // 随机生成3-10之间的长度(nextInt(max - min + 1)才能包含max值) int length = random.nextInt(max - min + 1) + min; // 生成由该字符重复length次的字符串 String repeatedString = new String(new char[length]).replace('\0', randomChar); System.out.println("String " + (n + 1) + ": " + repeatedString); } } public static void main(String[] args) { task(); } }
关键改动说明
- 将
Random实例移到循环外,避免重复创建,保证随机性更稳定 - 随机选字符时用
alpha.length()作为nextInt的参数,确保能取到所有26个小写字母 - 长度计算改为
random.nextInt(max - min + 1) + min,这样能包含10这个最大值(原代码nextInt(max - min)只能生成0-6,加min后是3-9,取不到10) - 也可以用
StringBuilder循环append实现重复字符,替代上述字符串生成方式:StringBuilder sb = new StringBuilder(length); for (int i = 0; i < length; i++) { sb.append(randomChar); } String repeatedString = sb.toString();
示例输出
String 1: ttttt String 2: mmmmmmmm String 3: aaa String 4: ppppppp String 5: llllllll String 6: zzzzz String 7: iiiiiiiii String 8: bbbbbb String 9: eeeeeeee String 10: sssss
内容的提问来源于stack exchange,提问作者Coco
相关产品推荐
相关产品推荐

