java实现输出指定长度的随机字符(大小写字母和数字)遇到问题?

importjava.util.ArrayList;importjava.util.Random;代码如下publicclassrandomlist{publicstat... 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码表写的 展开
 我来答
紫薇参星
科技发烧友

2021-12-21 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3606万
展开全部

程序输出错误的原因(见图)

改正后的程序如下(见图,改动的地方见注释)

其实可以简化程序如下(见图)

追问
啊十分感谢,已经完全搞明白了!
追答

因为你的nextInt方法传入的参数不对,方法要求传入生成随机数的范围,

nextInt(10)+48表示生成0到9范围的随机数,加上起始字符的ascii码值48,

就是你要的随机数数字的范围了,你传入的nextInt(57)是ascii码的终止码值,就不对了.

其它的随机数的nextInt参数与上面同理.

改正后的程序如下(见图,改动的地方见注释)

不灭归元
2021-12-21
知道答主
回答量:39
采纳率:100%
帮助的人:1.7万
展开全部
问题主要出在咱对 java.util.Random 这个类还不够理解,new Random(数字) 中的数字只是随机种子,而 netInt(数字) 中的数字才指定范围。
10个数字就用 netInt(10) 指定范围[0, 9],数字在ascii表对应是[48, 57],所以 netInt(10) + 48 = [0, 9] + 48 = [48, 57] 。大小写字母同理。
最关键的是咱可以学习IDEA如何使用debug调试代码,一步一步走下去,就能发现netInt()有问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
microroom
科技发烧友

2021-12-20 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:7118
采纳率:83%
帮助的人:1626万
展开全部
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();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式