- 題目
編寫程序解決以下問題:長度爲 N 的數組,隨機放入值爲 1-50 中間的任意 整數,請編寫程序找出其中的偶數數字,並按照該數字在數組中出現次數從多到少排序 輸出。
- 分析
首先建立長度爲n的數組,通過Random r = new Random(); r.nextInt(50) + 1 實現隨機數生成然後放入數組中。題目要求找偶數 那就是生成數字和2 取餘 ,等於0 那就是偶數了,把偶數做爲key單獨放一個Map數組,出現的次數 作爲Value. 統計Map數組key次數做 (evenMap.merge(temp, 0,Integer::sum); 這個是計算相同key 累加value)。最後對value 做從大到小排序,使用Java8特性sorted(Comparator.comparing(Map.Entry<Integer, Integer>::getValue).reversed())// 從大到小
具體代碼如下: - 代碼實現
package com.dairuijie.demo.study;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;
import java.util.stream.Collectors;
/**
*
* @模塊名:Day01
* @包名:com.dairuijie.demo.study
* @描述:FindEven.java
* @版本:1.0
* @創建人:drj
* @創建時間:2020年3月28日下午5:18:52
*/
public class FindEven {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("請輸入整數n:");
Integer read = Integer.valueOf(scan.nextLine());
ArrayList<Integer> list = new ArrayList<>();
Map<Integer,Integer> evenMap = new HashMap<Integer,Integer>();
Random r = new Random();
for(int i=0; i < read; i++) {
Integer temp = r.nextInt(50) + 1;
list.add(temp);
if(temp%2 ==0) {
evenMap.merge(temp, 0,Integer::sum);
}
}
System.out.println("初始化數組:" + list);
List<Integer> sortMapByValue = sortMapByValue(evenMap);
System.err.println("偶數排序數組:" + sortMapByValue);
scan.close();
}
/**
* //map集合根據value從大到小排序
* @方法名:sortMapByValue
* @方法描述:
* @param map
* @return
* @修改描述:
* @版本:1.0
* @創建人:drj
* @創建時間:2020年3月28日 下午5:37:58
* @修改人:drj
* @修改時間:2020年3月28日 下午5:37:58
*/
public static List<Integer> sortMapByValue(Map<Integer, Integer> map) {
int size = map.size();
List<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer, Integer>>(size);
list.addAll(map.entrySet());
List<Integer> keys = list.stream()
.sorted(Comparator.comparing(Map.Entry<Integer, Integer>::getValue).reversed())// 從大到小
.map(Map.Entry<Integer, Integer>::getKey)
.collect(Collectors.toList());
return keys;
}
}
- 運行效果
請輸入整數n:50
初始化數組:[19, 32, 25, 48, 1, 6, 32, 18, 42, 23, 7, 34, 45, 42, 26, 11, 5, 5, 12, 14, 48, 38, 24, 15, 37, 20, 18, 50, 25, 17, 34, 27, 34, 7, 20, 37, 9, 10, 24, 33, 42, 4, 48, 31, 21, 47, 30, 24, 20, 50]
偶數排序數組:[32, 34, 4, 38, 6, 10, 42, 12, 14, 48, 50, 18, 20, 24, 26, 30]