第一大题
第一问
标准的累加求和算法,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年考试:主观题解答 […]