問題:
隨機產生50個整數,位於[10,50],統計每個數字出現的次數以及出現次數最多的數字與出現次數並打印.如果出現次數爲0不打印,打印時要求升序
其實問題,並不難,只是覺得有知識在其中...知識點:
1.java和其他語言產生區間數的一般規律:左包含,右不包含,即[a,b)的形式
2.java中有兩種方式產生隨機數Math.random(),以及Random類來產生
如何產生[10,50]的隨機整數:
a.Math.random()方式產生
int a =(int) Math.random()*41;//注意是int強轉,這樣是截斷方式轉型,實際上Math.random()*41,會產生[0,41),截斷轉型就是[0,40]
int randomInt = a+10; // [10,50]
b.Random類產生Random random = new Random();
int randomInt = random.nextInt(41)+10;//產生一個[0,41)的整數也就是[0,40],再加上10,就是[10,50],由於是整數
這道題----只用一個一維數組的方式
package arrayWork;
import java.lang.reflect.Array;
import java.util.Random;
public class RandomDemo {
public static void main(String[] args) {
/**
* array的作用
* 1. array中存放的數字代表着array[i]+10的次數。array[3]=2,就意味着13產生了2次,通過第一個for循環實現
* 2.數組與隨機數之間的映射關係
*/
int[] array = new int[41];//產生【10,50】的整數,總共最多有41個整數(必然會有重複數字)
Random random = new Random();
//第一個for循環,產生隨機數並放入數組中
for(int i = 0;i<50;i++)
{
int randomInt = random.nextInt(41)+10;
array[randomInt-10]++; //默認的int型數組的默認值是1,一旦某個相應的值產生,使數組中的值加1,之後數組中的
}
//第二個for循環,由於數組本身的映射關係,自然升序排列的,打印--就是升序打印
for(int i =0;i<41;i++)
{
if(0==array[i])
{
continue;
}
System.out.println((i+10)+"的出現次數爲"+array[i]);
}
//第三個for循環,找出數組中最大值
int max = array[0];
for(int i =0;i<41;i++)
{
if(max<array[i])
{
max = array[i];
}
}
System.out.println("-------------------------------");
System.out.println("最大的出現次數爲: "+max);
System.out.print("出現最多次的數字有: ");
//打印數組中所有與最大值相等的元素,打印(元素下標+10-->就是打印出現次數最大的隨機數
for(int i =0;i<41;i++)
{
if(array[i]==max)
{
System.out.print((i+10)+" ");
}
}
}
}
一次運行結果:
11的出現次數爲2
12的出現次數爲2
14的出現次數爲2
17的出現次數爲4
18的出現次數爲1
20的出現次數爲1
21的出現次數爲2
22的出現次數爲1
23的出現次數爲1
24的出現次數爲2
25的出現次數爲2
26的出現次數爲1
27的出現次數爲1
28的出現次數爲2
31的出現次數爲4
32的出現次數爲2
33的出現次數爲2
34的出現次數爲2
35的出現次數爲3
36的出現次數爲4
41的出現次數爲1
42的出現次數爲2
45的出現次數爲2
47的出現次數爲1
48的出現次數爲2
50的出現次數爲1
-------------------------------
最大的出現次數爲: 4
出現最多次的數字有: 17 31 36
改進:沒有做相關封裝,整個都在main中,應該按功能做成相關函數