小白询问Java教材上的一道题。

老师给的PPT里是这样提示的。
图片说明
题目是
调用java.lang.Math的成员函数“public static double random()”运算下面表达式10000次,
(int) (Math.random()*20+0.5)
统计其中生成的整数0、1、2、……、20的个数分别是多少,并输出统计结果

我是这样写的
图片说明
请问各位书上说的方法怎么实现,或者,有没有更好的思路?

5个回答

去吧,交作业吧,如果老师认真看的话会说:这就叫结构化程序设计的思想。你先了解面向对象思想吧。

FlyAngle1
我是一只小小小小小鸟 回复wsad4196: 一切皆对象
大约 2 年之前 回复
morgerton
白萝卜blb 回复wsad4196: 百度,很普遍的这种思想。
大约 2 年之前 回复
wsad4196
史蒂芬闰土 敢问,面向对象的思想是什么。能科普一下吗
大约 2 年之前 回复

定义一个长度为20的数组,初始化为0,每次取下标未为(int) (Math.random()*20+0.5)-1的数组元素加一

MayWendy
MayWendy 数组长度为21,下标为(int) (Math.random()*20+0.5)的加1
大约 2 年之前 回复

强行写一个,自己优化一下代码呗

 package mathDemo;

public class MyDemo {
    static int[] arr = new int[20];
    static int[] nums = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,0};
    static int[] account = new int[21];
    public static void setArr(int[] arr) {
        for (int i = 0; i < 20; i++) {
            arr[i] = (int) (Math.random()*20 + 0.5);
        }
    }
    public static void getAccount(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < nums.length; j++) {
                if (arr[i] == nums[j]) {
                    account[j] += 1;
                }
            }
        }
    }
    public static void runSetter() {
        for (int i = 0; i < 10000; i++) {
            setArr(arr);
            getAccount(arr);
        }
        for (int j = 0; j < 21; j++) {
            System.out.println("整数" + nums[j] + ": " + account[j]);
        }
    }
    public static void main(String[] args) {
        runSetter();
    }
}

 public class Test_3_Math {

    private static int[] arr=new int [21];

    public Test_3_Math() {
        //初始化
        for (int i = 0; i < arr.length; i++) {
            arr[i] = 0;
        }
    }

    public static void main(String[] args) {

        for (int i = 0; i < 10000; i++) {
            //生成10000个随机整数
            int a = (int) (Math.random()*20+0.5);
            for (int j = 0; j <=20; j++) {
                if (a==j) {
                    arr[j]++;
                }
            }
        }

        int sum = 0;
        for (int i = 0; i < 20; i++) {
            sum+=arr[i];
        }
        System.out.println("总数"+sum);

        for (int i = 0; i <= 20; i++) {
            System.out.println(i+"有"+arr[i]+"个");
        }
    }
}

图片说明

根据提示做题啊,不是让你实现。实现的方式一大堆 :
题目的提示其实就是面向对象,设计 一个类A
package cn.test;

public class A {
private int[] elements = new int[1000];
private int[] counts = new int[21];
public A(){
for(int i=0;i<elements.length;i++){
elements[i]=(int) (Math.random()*20+0.5);
}
}
public void calculate(){
for(int i=0;i<elements.length;i++){
counts[elements[i]] ++;
}
}
public void output(){
for(int i=0;i<counts.length;i++){
System.out.println(String.format("%d 共有%d个", i,counts[i]));
}
}
public static void main(String[] args) {
A a =new A();
a.calculate();
a.output();
}
}
0 共有21个
1 共有58个
2 共有44个
3 共有45个
4 共有47个
5 共有69个
6 共有56个
7 共有48个
8 共有37个
9 共有47个
10 共有51个
11 共有52个
12 共有46个
13 共有46个
14 共有51个
15 共有53个
16 共有52个
17 共有53个
18 共有57个
19 共有43个
20 共有24个

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问