【软件构造】软件构造18年考试大题试题部分答案(仅供参考)

【软件构造】软件构造18年考试大题试题(仅供参考)

自己做的答案,有一些地方省略了,仅供参考,应该会有一些错误,期待指正。

2018
二、
第二行public->private
第3,4行存在别名,应改为:
Private final List…(new ArrayList<>());
第六行:
synchronied(lines){
Iterator iter = lines.iterator();
while (iter.hasNext()) {
String line = iter.next();
if (line.contains(filter))
iter.remove();
}
}
}
第12行:synchronied(title){
title = title.toUpperCase();
}
第16行:synchronied(lines){
for (String s : lines)
sb.append(s + “\n”);
}
//Thread Safety:
//6行在对mutable类型的lines进行迭代时增加锁以串行原子方式运行确保线程安全
//12行在对title操作增加锁串行原子方式运行确保线程安全
//16行在对lines迭代时增加锁确串行原子方式运行保线程安全
三、
四、
(1)22行:selectPaperByRandom中的返回papers存在表示泄露,应该用Collection.unmodifiedList(papers)返回。返回客户端可能会被修改导致选择的论文不匹配等错误。
24行:getSelectionResult() 返回存在表示泄露,应备份再将备份返回。返回客户端可能会被修改导致对象数据变化引起错误。
(2)public class NoEnoughPapersException extends Exception{
private final Student s;
private final int num;

	public NoEnoughPapersException(Student s, int num){
		this.s = s;
		this.num = num;
	}

	public Student getStudent() {
		return new Student(s.getName(), s.get..(), s.get..());
	}
	
	public int getNum() {
		return num;
	}

}

public class PaperList throws NoEnoughPapersException

18行改为throw new NoEnoughPapersException(student, availablePapers.size());

Client:
14行开始:
try {
listOfRainy.selectPaperByRandom(student);
}catch(NoEnoughPapersException e) {
System.out.println(“学生”+e.getStudent().getName()+“希望选论文” +e.getStudent().get…() “篇,但目前只有 “+e.getNum()+” 篇可选”);
}
5-2
PaperSelection类中新增一个方法:
public int accept(Visitor visitor){
Visitor.visit(this);
}
Vistor类:
public class Vistor{
public int visit(PaperSelection p) {
Map<Paper, Student> m = p.getSelections();
Set names = new HashSet;
for(Student s : m.values()) {
if(names.contains(s.getName()))
continue;
else
names.add(s.getName());
}
return names.size();
}
}
六、
(1)@param student 要为选择paper的学生,要求该学生未被分配论文
@return 返回一个List代表为该学生选择的文章列表,要求列表中论文未被其他学生引用,同时列表符合学生要求
@throws NoEnoughPapersException 如果没有足够的文章为该学生选择
(2)略

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值