“全国Java程序设计大赛”试题,大家有能力的做做,跪求大神解答

ok406lhq 2016-05-08 11:05:04
(“全国Java程序设计大赛”试题)未来的某一天,你的同事刘小虾最近被经理安排管理公司内的图书借阅,要对公司里的图书进行大清查,将一些不常用的图书捐给大别山里的小朋友……
经理给小虾提供了一份借阅名单,里面是公司里每个人所借书目的历史记录,要求小虾将各书的借阅次数计算出来。
小虾立马定义了一个接口BookCounter,将这个接口交给手下的陈小月去实现,并交待了要实现的类名为BookCounterImpl,能使用无参构造方法来创建实例。
陈小月身体突然不舒服,马上请了个假,这时,这个重任就又落在你身上了,快为小月实现这个BookCounterImpl类吧。
接口BookCounter代码如下:
import java.util.*;
public interface BookCounter {
/**
* @param userBooks 人员的借阅记录。其中Map的key为公司人员的工号,value是这个人所借过的书的书号。
* @return 每本书被多少人借过。其中Map的key是书的书号,value是借过这本书的人数
*/
Map<String, Integer> count(Map<String, Set<String>> userBooks);
}
...全文
739 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
dxwang0222 2016-05-12
  • 打赏
  • 举报
回复
正在学习中,将来一定会做
tangxheng 2016-05-12
  • 打赏
  • 举报
回复
我不是NB的程序员,我只是代码的搬运工:
package dmiaes.client.view;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class BookCounterImpl implements BookCounter {

	/**
	 * 无参构造函数
	 */
	public BookCounterImpl(){
	}
	
	@Override
	/**
	 * @param userBooks
	 *            人员的借阅记录。其中Map的key为公司人员的工号,value是这个人所借过的书的书号。
	 * @return 每本书被多少人借过。其中Map的key是书的书号,value是借过这本书的人数
	 */
	public Map<String, Integer> count(Map<String, Set<String>> userBooks) {
		//存放结果的map
		Map<String, Integer> resultMap = new HashMap<String, Integer>();
		
		//开始逐行翻阅资料
		for (Map.Entry<String, Set<String>> entry : userBooks.entrySet()) {
			//单人的借阅情况
			Iterator<String> it = entry.getValue().iterator();  
			
			//根据单人借阅情况,加入结果map
			while(it.hasNext()){
				String bookID = it.next();
				
				//已录入的书号,只需要借阅次数加1,否则录入新书号,并设置借阅次数为1
				if(resultMap.containsKey(bookID)){
					resultMap.put(bookID, resultMap.get(bookID)+1);
				}else{
					resultMap.put(bookID, 1);
				}
			}
		}

		return resultMap;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		BookCounter bc = new BookCounterImpl();
        
        Set<String> set1 = new HashSet<String>();
        set1.add("a");
        set1.add("b");
        set1.add("c");
        set1.add("f");
         
        Set<String> set2 = new HashSet<String>();
        set2.add("d");
        set2.add("b");
        set2.add("c");
         
        Set<String> set3 = new HashSet<String>();
        set3.add("a");
        set3.add("b");
        set3.add("d");
         
        Map<String, Set<String>> map = new HashMap<String, Set<String>>();
        map.put("person1", set1);
        map.put("person2", set2);
        map.put("person3", set3);
        Map<String, Integer> countsMap = bc.count(map);
        for(Iterator<String> i = countsMap.keySet().iterator();i.hasNext();){
            String key = i.next();
            System.out.println(key + " : " + countsMap.get(key));
        }
	}

}
playo123 2016-05-12
  • 打赏
  • 举报
回复
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class BookCounterImpl implements BookCounter {
	/**
	 * @param userBooks
	 *            人员的借阅记录。其中Map的key为公司人员的工号,value是这个人所借过的书的书号。
	 * @return 每本书被多少人借过。其中Map的key是书的书号,value是借过这本书的人数
	 */
	@Override
	public Map<String, Integer> count(Map<String, Set<String>> userBooks) {
		Map<String, Integer> map = new HashMap<String, Integer>();

		// 所有的书
		Set<String> books = new HashSet<String>();

		Set<String> keySet = userBooks.keySet();
		Iterator<String> it = keySet.iterator();
		while (it.hasNext()) {
			Set<String> bs = userBooks.get(it.next());
			for (String b : bs) {
				if (!books.contains(b)) {
					books.add(b);
				}
			}
		}

		for (String b : books) {
			Integer count = 0;
			Iterator<String> it2 = keySet.iterator();
			while (it2.hasNext()) {
				String n = it2.next();
				Set<String> bs = userBooks.get(n);
				for (String b2 : bs) {
					if(b.equals(b2)){
						count++;
					}
				}
			}
			
			map.put(b, count);
		}

		return map;
	}

}
  • 打赏
  • 举报
回复
(“全国Java程序设计大赛”试题)未来的某一天,你的同 明明是(作业题)未来的某一天,你的同
ok406lhq 2016-05-11
  • 打赏
  • 举报
回复
public class TestCount {

	public interface BookCounter {
		/**
		 * @param userBooks
		 *            人员的借阅记录。其中Map的key为公司人员的工号,value是这个人所借过的书的书号。
		 * @return 每本书被多少人借过。其中Map的key是书的书号,value是借过这本书的人数
		 */
		Map<String, Integer> count(Map<String, Set<String>> userBooks);
	}
	
	public class BookCounterImpl implements BookCounter {

		@Override
		public Map<String, Integer> count(Map<String, Set<String>> userBooks) {
			Map<String, Integer> counts = new HashMap<String, Integer>();
			Set<String> ubKeys = userBooks.keySet();
			for(Iterator<String> i = ubKeys.iterator();i.hasNext();){
				Set<String> ubValue = userBooks.get(i.next());
				for(Iterator<String> ite = ubValue.iterator();ite.hasNext();){
					String countKey = ite.next();
					Integer inte = counts.get(countKey);
					if(inte == null){
						inte = 0;
					}
					inte++;
					counts.put(countKey, inte);
				}
			}
			return counts;
		}
		
	}

	public static void main(String[] args) {
		BookCounter bc = new TestCount().new BookCounterImpl();
		
		Set<String> set1 = new HashSet<String>();
		set1.add("a");
		set1.add("b");
		set1.add("c");
		set1.add("f");
		
		Set<String> set2 = new HashSet<String>();
		set2.add("d");
		set2.add("b");
		set2.add("c");
		
		Set<String> set3 = new HashSet<String>();
		set3.add("a");
		set3.add("b");
		set3.add("d");
		
		Map<String, Set<String>> map = new HashMap<String, Set<String>>();
		map.put("person1", set1);
		map.put("person2", set2);
		map.put("person3", set3);
		Map<String, Integer> countsMap = bc.count(map);
		for(Iterator<String> i = countsMap.keySet().iterator();i.hasNext();){
			String key = i.next();
			System.out.println(key + " : " + countsMap.get(key));
		}
	}

}
[/quote]
baozi0543 2016-05-10
  • 打赏
  • 举报
回复
晕 set集合不可重复
baozi0543 2016-05-10
  • 打赏
  • 举报
回复
不是那么简单
baozi0543 2016-05-10
  • 打赏
  • 举报
回复
一个人同一本书可以借很多次 但你不能加1
li4c 2016-05-10
  • 打赏
  • 举报
回复
就这还编程大赛啊
爱睡觉的阿狸 2016-05-10
  • 打赏
  • 举报
回复
给个33分,我从此告别技术区。
爱睡觉的阿狸 2016-05-10
  • 打赏
  • 举报
回复
想想还是写一下吧,免得你说CSDN上都是只会吹牛的
public class TestCount {

	public interface BookCounter {
		/**
		 * @param userBooks
		 *            人员的借阅记录。其中Map的key为公司人员的工号,value是这个人所借过的书的书号。
		 * @return 每本书被多少人借过。其中Map的key是书的书号,value是借过这本书的人数
		 */
		Map<String, Integer> count(Map<String, Set<String>> userBooks);
	}
	
	public class BookCounterImpl implements BookCounter {

		@Override
		public Map<String, Integer> count(Map<String, Set<String>> userBooks) {
			Map<String, Integer> counts = new HashMap<String, Integer>();
			Set<String> ubKeys = userBooks.keySet();
			for(Iterator<String> i = ubKeys.iterator();i.hasNext();){
				Set<String> ubValue = userBooks.get(i.next());
				for(Iterator<String> ite = ubValue.iterator();ite.hasNext();){
					String countKey = ite.next();
					Integer inte = counts.get(countKey);
					if(inte == null){
						inte = 0;
					}
					inte++;
					counts.put(countKey, inte);
				}
			}
			return counts;
		}
		
	}

	public static void main(String[] args) {
		BookCounter bc = new TestCount().new BookCounterImpl();
		
		Set<String> set1 = new HashSet<String>();
		set1.add("a");
		set1.add("b");
		set1.add("c");
		set1.add("f");
		
		Set<String> set2 = new HashSet<String>();
		set2.add("d");
		set2.add("b");
		set2.add("c");
		
		Set<String> set3 = new HashSet<String>();
		set3.add("a");
		set3.add("b");
		set3.add("d");
		
		Map<String, Set<String>> map = new HashMap<String, Set<String>>();
		map.put("person1", set1);
		map.put("person2", set2);
		map.put("person3", set3);
		Map<String, Integer> countsMap = bc.count(map);
		for(Iterator<String> i = countsMap.keySet().iterator();i.hasNext();){
			String key = i.next();
			System.out.println(key + " : " + countsMap.get(key));
		}
	}

}
爱睡觉的阿狸 2016-05-10
  • 打赏
  • 举报
回复
我做了,你给分么? 会结贴么?
没事眯一会 2016-05-09
  • 打赏
  • 举报
回复
引用 2 楼 bree06 的回复:
我很怀疑全国Java程序设计大赛就这水平,有没有认同的
+1
迷林 2016-05-09
  • 打赏
  • 举报
回复
引用 2 楼 bree06 的回复:
我很怀疑全国Java程序设计大赛就这水平,有没有认同的
+1
bree06 2016-05-09
  • 打赏
  • 举报
回复
我很怀疑全国Java程序设计大赛就这水平,有没有认同的
  • 打赏
  • 举报
回复
神甲乙 2016-05-09
  • 打赏
  • 举报
回复
justdo_ 2016-05-09
  • 打赏
  • 举报
回复
import java.util.*; public class BookCounterImpl implements BookCounter{ public Map<String,Integer> count(Map<String, Set<String>> userBooks){ Map<String,Integer> map = new HashMap<String,Integer>(); for(String employeeId :userBooks.keySet()){ for(String BookId:userBooks.get(employeeId)){ if(map.containsKey(BookId)){ //存在这个书号,在原来的基础加1 map.put(BookId, map.get(BookId)+1); }else{ //不存在就放一个人 map.put(BookId, 1); } } } return map; } } //自己写的,至少编译没有问题,看看对不对吧
qq_24026899 2016-05-09
  • 打赏
  • 举报
回复
你也可以肚子疼呀。
丨蒋天丨 2016-05-09
  • 打赏
  • 举报
回复
加载更多回复(2)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧