AP计算机2015年考试:主观题解答
第一大题
第一问
标准的累加求和算法,for-each可以稍微简化一点代码。
public static int arraySum(int[] arr){
int sum = 0;
for (int elem : arr){
sum += elem;
}
return sum;
}
第二问
同上,注意二维数组的本质是一维数组的数组。事实上因为涉及到索引,这里的循环用for会更加方便。
public static int[] rowSums(int[][] arr2D){
int[] sums = new int[arr2D.length];
int rowNum = 0;
for (int[] row : arr2D){
sums[rowNum] = arraySum(row);
rowNum++;
}
return sums;
}
第三问
嵌套循环,每行之间两两比较,j = i + 1是因为(i, j)比较过以后就不用再比(j, i)了。
public static boolean isDiverse(int[][] arr2D){
int[] sums = rowSums(arr2D);
for (int i = 0; i < sums.length; i++){
for (int j = i + 1; j < sums.length; j++){
if (sums[i] == sums[j]){
return false;
}
}
}
return true;
}
第二大题
注意根据题目条件word和guess长度相同,因此每个字符比一遍即可。
public class HiddenWord
{
private String word;
public HiddenWord(String hWord)
{
word = hWord;
}
public String getHint(String guess){
String hint = "";
for (int i = 0; i < guess.length(); i++){
if (guess.substring(i, i + 1).equals(word.substring(i, i + 1))){
hint += guess.substring(i, i + 1);
} else if (word.indexOf(guess.substring(i, i + 1)) != -1 ){
hint += "+";
} else {
hint += "*";
}
}
return hint;
}
}
第三大题
第一问
简单的ArrayList遍历。
public int getValueAt(int row, int col){
for (SparseArrayEntry e : entries){
if (e.getRow() == row && e.getCol() == col){
return e.getValue();
}
}
return 0;
}
第二问
使用while循环的原因是对于删除的元素,i不能递增,否则最终会超出size。要注意对后面列的处理和总列数的处理。
public void removeColumn(int col){
int i = 0;
while (i < entries.size()){
SparseArrayEntry e = entries.get(i);
if (e.getCol() == col){
entries.remove(i);
} else if (e.getCol() > col){
entries.set(i, new SparseArrayEntry(e.getRow(), e.getCol() - 1, e.getValue()));
i++;
} else {
i++;
}
}
numCols--;
}
第四大题
第一问
基本的interface,只写method签名即可。
public interface NumberGroup
{
boolean contains(int num);
}
第二问
contains需要与interface定义的一致。注意Range未必要实际储存每一个范围内的整数,只要contains能正常工作即可。
public class Range implements NumberGroup
{
private int min;
private int max;
public Range(int min, int max)
{
this.min = min;
this.max = max;
}
public boolean contains(int num) {
return num >= min && num <= max;
}
}
第三问
送分题,一旦有true即返回。
public boolean contains(int num){
for (NumberGroup group : groupList){
if (group.contains(num)){
return true;
}
}
return false;
}
1 条评论
AP计算机2015年考试:主观题 – AP计算机科学A · 2019年3月18日 下午3:59
[…] AP计算机2015年考试:主观题解答 […]