Java筆試題分析

  • 題目

編寫程序解決以下問題:長度爲 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]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章