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 + "次");
}
}
我要举报
如以上信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
推荐资讯
大家都在看