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.
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:
Câu hỏi thường gặp liên quan: