Java - Viết chương trình đếm số lần xuất hiện của số lớn nhất có trong Map.

Viết chương trình nhập vào một dãy số bất kỳ từ bàn phím, việc nhập sẽ kết thúc khi số nhập vào là số 0. Sau đó tìm ra số có số lần xuất hiện nhiều nhất trong dãy. Nếu có nhiều số có số lần xuất hiện nhiều nhất và bằng nhau thì hiển thị tất cả các số đó ra.

Bài giải

-------------------- ######## --------------------

Hướng dẫn: Để giải bài này, đầu tiên chúng ta sẽ khai báo 2 Map: một Map lưu trữ các số người dùng nhập vào từ bàn phím, 1 Map lưu trữ các số có số lần xuất hiện nhiều nhất trong Map đầu tiên. Nếu số nhập vào đã có trong Map thứ nhất thì sẽ tăng số lần xuất hiện của số đó lên 1 và lưu vào trong Map đó, còn ngược lại thì cho số lần xuất hiện của số đó bằng 1. Hàm Collections.max() để tìm ra số lần xuất hiện nhiều nhất của 1 số có trong Map thứ nhất. Sau đó sẽ duyệt qua các entry có trong Map thứ nhất, nếu có entry nào có giá trị lớn hơn số maxTimes thì sẽ lưu giá trị đó vào trong Map thứ hai.

Bài giải
public static void main(String[] args) {
	int number;
	Scanner scanner = new Scanner(System.in);
		
	// đối số 1 trong Map là number nhập vào
	// đối số 2 là số lần xuất hiện của number đó
	Map<Integer, Integer> mapInteger = new HashMap<>();
		
	System.out.println("Nhập vào số. Nhập vào số 0 để kết thúc: ");
        while ((number = scanner.nextInt()) != 0) {
        	// nếu số nhập vào chưa có trong mapInteger
        	// thì sẽ thêm vào trong mapInteger 
        	// số đó có số lần xuất hiện là 1
        	// nếu đã có thì sẽ tăng số lần xuất hiện của số đó lên 1
        	if (!mapInteger.containsKey(number)) {
        		mapInteger.put(number, 1);
        	} else {
        		mapInteger.put(number, mapInteger.get(number) + 1);
        	}
        }
        
        // trả về maxTimes là số lần xuất hiện nhiều nhất
        // trong mapInteger
        int maxTimes = Collections.max(mapInteger.values());
        
        // highestMapInteger sẽ lưu trữ 
        // số có số lần xuất hiện nhiều nhất
        Map<Integer, Integer> highestMapTimes = new HashMap<>();
        
        // duyệt qua từng phần tử của mapInteger
        mapInteger.forEach((key, value) -> {
        	// nếu value nào trong mapInteger lớn hơn hoặc bằng maxNumber
        	// thì thêm key và value của số đó vào trong highestMapInteger
            if (value >= maxTimes) {
            	highestMapTimes.put(key, value);
            }
        });
        
        System.out.println("Số có số lần xuất hiện nhiều nhất là: ");
        highestMapTimes.forEach((so, soLan) ->
        System.out.println(so + " xuất hiện " + soLan + " lần"));
	}

}

Kết quả sau khi biên dịch chương trình:

Nguồn: freetuts.net

Câu hỏi và bài tập