java实现输出指定长度的随机字符(大小写字母和数字)遇到问题?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java实现输出指定长度的随机字符(大小写字母和数字)遇到问题?相关的知识,希望对你有一定的参考价值。
import java.util.ArrayList;import java.util.Random;代码如下public class randomlist public static void main(String[] args) ArrayList<Character> list = new ArrayList<>(); Random num = new Random(57);//+48 Random letter = new Random(122);//+97 Random Letter = new Random(90);//+65 Random dice = new Random(3);//随机加入大写小写字母或者数字的骰子 String str = ""; for (int i = 0; i < 20; i++) int e = dice.nextInt(); if(e==0) list.add((char)(num.nextInt()+48)); else if(e==1) list.add((char)(letter.nextInt()+97)); else list.add((char)(Letter.nextInt()+65)); str=str+list.get(i); System.out.println(str); 运行结果如图,不知道为什么输出的是那个,我是对照asc码表写的
程序输出错误的原因(见图)
改正后的程序如下(见图,改动的地方见注释)
其实可以简化程序如下(见图)
追问啊十分感谢,已经完全搞明白了!
追答因为你的nextInt方法传入的参数不对,方法要求传入生成随机数的范围,
nextInt(10)+48表示生成0到9范围的随机数,加上起始字符的ascii码值48,
就是你要的随机数数字的范围了,你传入的nextInt(57)是ascii码的终止码值,就不对了.
其它的随机数的nextInt参数与上面同理.
改正后的程序如下(见图,改动的地方见注释)
10个数字就用 netInt(10) 指定范围[0, 9],数字在ascii表对应是[48, 57],所以 netInt(10) + 48 = [0, 9] + 48 = [48, 57] 。大小写字母同理。
最关键的是咱可以学习IDEA如何使用debug调试代码,一步一步走下去,就能发现netInt()有问题。 参考技术B 1
nextInt方法使用错了,改成:
int e = dice.nextInt(3);
list.add((char)(num.nextInt(10)+48));
list.add((char)(letter.nextInt(26)+97));
list.add((char)(Letter.nextInt(26)+65));
2
因为你的所有种子都是固定的,产生的是一个固定的字符串。
解决办法很多,比如可以将
Random dice=new Random(3);
改成
Random dice=new Random();
随机输出验证码
题目要求写出可以自动生成验证码的程序,由于之前写了个随机生成计算题的程序,因此这个程序,我打算使用随机数解决。
验证码即是一个字符串,且验证码这个字符串的每个字符从大小写字母和数字里面取得。因此,我新建了一个字符数组,里面包含了全部的大小写字母和数字。并通过以随机数作为下标,获得此字符数组里面的字符,连接到字符串上,以此得到想要的随机字符串。
此程序可以指定得到验证码的位数和个数。
程序代码:
package 验证码;
import java.util.Date;
import java.util.Scanner;
import java.util.Random;
public class yanzhengma {
public static String getstring(int n){
String str="";
int a;
char ch;
char [] c= {‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘, ‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘, ‘G‘, ‘H‘, ‘I‘, ‘J‘, ‘K‘,‘L‘, ‘M‘, ‘N‘, ‘O‘, ‘P‘, ‘Q‘, ‘R‘, ‘S‘, ‘T‘, ‘U‘, ‘V‘, ‘W‘, ‘X‘, ‘Y‘, ‘Z‘, ‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘, ‘g‘, ‘h‘, ‘i‘, ‘j‘, ‘k‘, ‘l‘, ‘m‘, ‘n‘,‘o‘, ‘p‘, ‘q‘, ‘r‘, ‘s‘, ‘t‘, ‘u‘, ‘v‘, ‘w‘, ‘x‘, ‘y‘, ‘z‘};
Random r=new Random();
for(int i=0;i<n;i++) {
a=r.nextInt(c.length-1)+1;
ch=c[a];
str=str+ch;
}
return str;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
int weishu;
int geshu=0;
System.out.println("请输入想要得到的验证码的位数:");
weishu=scan.nextInt();
System.out.println("请输入想要得到的验证码的个数:");
geshu=scan.nextInt();
for(int i=0;i<geshu;i++) {
System.out.println(getstring(weishu));
}
}
}
以上是关于java实现输出指定长度的随机字符(大小写字母和数字)遇到问题?的主要内容,如果未能解决你的问题,请参考以下文章
java怎么实现自动生成一个由英文字母(区分大小写)、数字、符号组成,6-12个字符 的密码