Java 仅生成随机字母表字符

Java 仅生成随机字母表字符,java,Java,我创建了一个程序,该程序从用户那里获取一个数字,并根据用户输入的数量生成一个字符数组,该数组包含大写和小写字母(但没有其他字符),这些字符必须按随机顺序排列。换句话说,如果用户输入5,程序生成5个随机的小写/大写字母,如果用户输入25,程序生成25个字母,以此类推。 我的程序几乎完全成功,只是我无法找到一个只生成大写或小写字母的好方法。它还生成字符91-96([,\,],^,',),我不需要它们 我尝试了while和if语句来删除不需要的字符,以及在Math.random公式中,将58替换为'd

我创建了一个程序,该程序从用户那里获取一个数字,并根据用户输入的数量生成一个字符数组,该数组包含大写和小写字母(但没有其他字符),这些字符必须按随机顺序排列。换句话说,如果用户输入5,程序生成5个随机的小写/大写字母,如果用户输入25,程序生成25个字母,以此类推。 我的程序几乎完全成功,只是我无法找到一个只生成大写或小写字母的好方法。它还生成字符91-96([,\,],^,',),我不需要它们

我尝试了while和if语句来删除不需要的字符,以及在Math.random公式中,将58替换为'desiredChars.length',它包含所有需要的字符,但似乎没有任何效果

// Program to generate random chars. 
Scanner sc = new Scanner(System.in);
System.out.println("This program will print an array of random letters based on your specified array size. \nPlease enter your desired array size: ");
int number = sc.nextInt();  
char[] arrayList = new char[number];
int i;
int lowercaseCount = 0;
int uppercaseCount = 0;
// final char[] desiredChars = {'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Z', 'X', 'C', 'V', 'B', 'N', 'M'};    


for (i = 0; i < arrayList.length; i++) {
arrayList[i] = (char) ((65 + Math.random()*(58)));
if (Character.isLowerCase(arrayList[i])) {lowercaseCount++;}
if (Character.isUpperCase(arrayList[i])) {uppercaseCount++;}}

System.out.println("Your array with " + number + " random letter(s) is below:\n"+ Arrays.toString(arrayList));
System.out.println("The number of lowercase in your array is " + lowercaseCount);
System.out.println("The number of lowercase in your array is " + uppercaseCount); }}
//生成随机字符的程序。
扫描仪sc=新的扫描仪(System.in);
System.out.println(“此程序将根据指定的数组大小打印随机字母数组。\n请输入所需的数组大小:”;
int number=sc.nextInt();
char[]arrayList=新字符[number];
int i;
int lowercaseCount=0;
int uppercaseCount=0;
//最终字符[]期望字符={'q',w',e',r',t',y',u',i',o',p',a',s',d',f',g',h',j',k',l',z',x',c',b',n',m',q',w',e',r',t',y',u',i',o',p',a',s',d',f',g',h',j',k',l',z',c',v',b',n',m'};
对于(i=0;i
首先生成一组字母

 private static void appendCharacterRange(List<Character> list, char from, char to) {
    for (char c=from; c<=to; c++){
        list.add(c);
    }
 }

  private static List<Character> getNRandomLetters(int n){
    List<Character> list = new LinkedList<>();
    appendCharacterRange(list, 'a', 'z');
    appendCharacterRange(list, 'A', 'Z');
    Collections.shuffle(list);
    List<Character> result = new LinkedList<>();
    if (n<list.size()){
        return list.subList(0, n);
    }
    for (int i=0; i<=n; i=i+list.size()) {
        result.addAll(list.subList(0, i+result.size()>n?n-result.size():list.size()));
        Collections.shuffle(list);
    }
    return result;
}
private static void appendCharacterRange(列表、字符从、字符到){

对于(char c=from;c,这里有一种方法,它使用包含所有可能字符的静态字符串:

String uppers = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
String all = uppers + uppers.toLowerCase();

int number = sc.nextInt();  
char[] arrayList = new char[number];

Random rand = new Random();

for (int i=0; i < number; ++i) {
    int position = rand.nextInt(all.length());
    arrayList[i] = all.charAt(position);
}

System.out.println(Arrays.toString(arrayList));

你可以按如下方式编辑for循环:循环直到得到你需要的。我们生成一个随机字母。如果它不在我们想要的范围内,那么我们循环直到它是我们想要的

注意。理论上,我的答案可能会导致无限循环,尽管概率很低

for(i=0;i虽然(randChar>=91&&randChar一个代码示例会很有用。@MensurQulami,我发布了我的代码。我完全想在我的原始帖子中发布它,但忘了,直到我在发布问题后才意识到我没有发布代码。你可以循环,直到你得到你想要的字符。我的意思是,如果数字在91-96之间,然后再次重复,直到你得到其他东西
(char)('A'+(char)(Math.random()*26)+Math.round(Math.random())*('A'-'A'))
@MensurQulami,我确实尝试创建while循环,但它们不起作用,例如,我在下面添加了代码,它所做的只是将我放入一个无限循环中,作为用户输入一个数字。while(arrayList[I]>91&&arrayList[I]从技术上讲,这段代码可能会产生一个无限循环。确切地说,尽管这种可能性很低。对,但你仍然无缘无故地故意降低效率。我愿意接受任何其他建议。我只是修改了请求者的代码,以便它能像他们预期的那样工作。下面提供的答案是正确的,我知道。但是,这些都是证明正在使用另一种方法。我的正在编辑问题所在。这很有效!!!感谢您修复我的错误循环:)。请让我知道我对固定代码中发生的情况的理解是否正确。如果生成了与不需要的字符范围内的字符对应的int,则会触发另一个循环以生成随机int。生成不需要的int时,循环会不断重复。中断循环的是生成的所需字符。是否这对吗?
[L, q, s, q, i, U, H, p, u, I]