java怎么统计随机数出现次数,java产生随机数,统计出现次数,按用户要求输出结果...

本文指导如何使用Java编写代码,生成指定范围(1到50)的随机数,统计各数出现频率,并按用户要求显示结果,包括频率最高和最低的整数。通过TextIO进行用户交互和输出格式化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java产生随机数,统计出现次数,按用户要求输出结果

关注:175  答案:3  手机版

解决时间 2021-02-14 12:09

提问者预订小鲜肉

2021-02-13 23:42

题很简单。。 不过也足够让我一初学Java的小女生头疼一阵了。。

要求:

写一个Random 函数产生范围从1-n的随机数,

建立一个整数数组用来统计各个数字出现频率

(例:数组中第i个值存储了整数i出现的次数)

打印出产生的数字和频率,

并且要求从用户得到数字产生范围、个数和每行显示的整数个数

例如用户要求产生 10,000 个从 1 到 50的整数 ,每行显示11个

打印结果:

Random Integer Frequency Table (10000 trials)

1-11 217 197 184 199 210 233 213 195 177 208 211

12-22 183 199 192 213 215 194 194 191 211 197 217

23-33 220 182 228 190 184 186 198 183 212 201 161

34-44 213 196 200 185 226 177 185 201 195 211 194

45-50 221 184 192 202 234 189

最后要求找出出现频率最高和最低的整数 并且输出数字和频率

那位师兄帮帮忙。。 小妹不胜感激中。。

http://www.cosc.brocku.ca/Offerings/1P02/assign4-09.shtml

原题地址。。。

拜托各位了。。

我这门课就指着这个作业拿分才能pass了。。。

在线等。。

多谢citytalent了

最佳答案

二级知识专家你瞎啊撞我心上來

2021-02-14 01:16

import java.util.Random;

public class Test {

public static void main(String[] args) {

String nStr;

String numStr;

String perStr;

int count;

int random;

int n;

int per;

TextIO.putln("输入要产生随即数的最大值(整数)");

nStr = TextIO.getln();

TextIO.putln("输入产生多少个随即数(整数)");

numStr = TextIO.getln();

TextIO.putln("输入每行输出多少个数(整数)");

perStr = TextIO.getln();

count = Integer.valueOf(nStr);

n = Integer.valueOf(numStr);

per = Integer.valueOf(perStr);

int[] arr = new int[count];

for (int i = 0; i < n; i++) {

random = new Random().nextInt(count) + 1;

arr[random - 1] += 1;

}

TextIO.putln("Random Integer Frequency Table (" + numStr + " trials)");

for (int i = 1; i < arr.length + 1; i++) {

if (i % per == 1) {

int temp = i + per - 1;

if (temp < arr.length) {

TextIO.put(i + "-" + temp + " ");

} else {

TextIO.put(i + "-" + arr.length + " ");

}

}

TextIO.put(arr[i - 1] + " ");

if (i % per == 0) {

TextIO.putln();

}

}

TextIO.putln();

int max = 0;

int min = n / count;

for (int i = 0; i < arr.length; i++) {

if (max <= arr[i]) {

max = arr[i];

}

if (min >= arr[i]) {

min = arr[i];

}

}

String maxS = getNumber(max, arr);

String minS = getNumber(min, arr);

TextIO.putln("出现最多的是" + maxS + ",出现了" + max + "次");

TextIO.putln("出现最少的是" + minS + ",出现了" + min + "次");

}

private static String getNumber(int n, int[] arr) {

String temp = "";

for (int i = 0; i < arr.length; i++) {

if (n == arr[i]) {

temp += String.valueOf(i + 1) + ",";

}

}

return "".equals(temp) ? "" : temp.substring(0, temp.length() - 1);

}

}

//按你要求 再次修改 统一使用 TextIO.getln() 和TextIO.putln()

全部回答

1楼甜心萌物酱

2021-02-14 04:07

我明白你想问什么,你觉得在“do while”里的这个isexist(num, numbers)函数怎么可能调用,因为你的理由是numbers数组的赋值在之后才进行。

你的想法是对的,numbers的赋值的确是在while为false之后才进行,但是java数组有这个特性,就是你在初始化之后,即使没有赋值,系统会给它有一个默认值,我记得这个默认值是0,也就是默认数组里的每个元素都是0。所以numbers可以被作为参数传入isexis函数来进行计算。

有问题再追问。

2楼在時光深處躲貓貓

2021-02-14 02:32

我再精简下

import java.util.Random;

public class Test86 {

public static void main(String[] args) {

int i = 10000;

int j = 50;

int tmp = 0;

int[] ii = new int[j];

Random ran = new Random();

for (int k = 0; k < i; k++) {

tmp = ran.nextInt(j);

ii[tmp] = ii[tmp] + 1;

}

getRandom(ii, i);

}

private static void getRandom(int[] ss, int m) {

for (int i = 0; i < ss.length; i++) {

if ((i) % 11 == 0) {

if ((i + 11) > ss.length) {

System.out.println();

System.out.print(i + 1 + "-" + ss.length + " ");

} else {

System.out.println();

System.out.print(i + 1 + "-" + (i + 11) + " ");

}

}

System.out.print(ss[i] + " ");

}

System.out.println();

int ii[] = new int[ss.length];// 存放出现次数最多的

int ii2[] = new int[ss.length];// 存放出现次数最少的

int k = 0;

int temp = 0;// 比较的时候的中间量 记录最多的次数

int temp2 = m;// 比较的时候的中间量 记录最少的次数,因为最多就m个数字

for (int i = 0; i < ss.length; i++) {

if (temp < ss[i]) {

temp = ss[i];

}

if (temp2 > ss[i] && ss[i] != 0) {

temp2 = ss[i];

}

}

for (int i = 0; i < ss.length; i++) {

if (temp == ss[i]) {

ii[k] = ss[i];

}

if (temp2 == ss[i]) {

ii2[k] = ss[i];

}

k++;

}

System.out.println();// 没有实际作用打印个换行而已

System.out.print("出现最多的是:");

for (int i = 0; i < ii.length; i++) {

if (ii[i] != 0) {

System.out.print((i + 1) + " ");

}

}

System.out.println(" " + temp + "次");

System.out.println();// 没有实际作用打印个换行而已

System.out.print("出现最少的是:");

for (int i = 0; i < ii2.length; i++) {

if (ii2[i] != 0) {

System.out.print((i + 1) + " ");

}

}

System.out.println(" " + temp2 + "次");

}

}

我要举报

如以上信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!

推荐资讯

大家都在看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值