AP计算机2017年考试:主观题解答

陈 欣发布

第一大题

第一问

考察取模和整数除法,以及在ArrayList的头部添加元素。注意按某个基(AP计算机中目前都只出现十进制)将整数分解成数字算法的递归版本在多项选择中时有出现,需要掌握。

public Digits(int num)
{
    digitList = new ArrayList<Integer>();
    if (num == 0)
    {
        digitList.add(new Integer(0));
    }

    while (num > 0)
    {
        digitList.add(0, new Integer(num % 10));
        num /= 10;
    }
}

第二问

考察对ArrayList元素的循环,注意循环条件需要比正常情况的少一。在循环中一旦不满足条件就直接return也是在AP计算机考试中常见的编程模式。

public boolean isStrictlyIncreasing()
{
    for (int i = 0; i < digitList.size()-1; i++)
    {
        if (digitList.get(i).intValue() >= digitList.get(i+1).intValue())
        {
            return false;
        }
    }
    return true;
}

第二大题

送分题,考interface和一些面向对象编程的基本概念。

public class MultPractice implements StudyPractice
{
    private int first;
    private int second;

    public MultPractice(int num1, int num2)
    {
        first = num1;
        second = num2;
    }

    public String getProblem()
    {
        return first + " TIMES " + second;
    }

    public void nextProblem()
    {
        second++;
    }
}

第三大题

第一问

需要正确使用题目中给出的method,知道如何计算String的索引并应用substring进行裁剪。

public void replaceNthOccurrence(String str, int n, String repl)
{
    int loc = findNthOccurrence(str, n);

    if (loc != -1)
    {
        currentPhrase = currentPhrase.substring(0, loc) + repl +
         currentPhrase.substring(loc + str.length());
    }
}

第二问

主要考察循环的正确用法以及对n的计算。

public int findLastOccurrence(String str)
{
    int n = 1;
    while (findNthOccurrence(str, n+1) != -1)
    {
        n++;
    }
    return findNthOccurrence(str, n);
}

第四大题

第一问

遍历二维数组,送分题。return的模式再一次出现。

public static Position findPosition(int num, int[][] intArr)
{
    for (int row=0; row < intArr.length; row++)
    {
        for (int col=0; col < intArr[0].length; col++)
        {
            if (intArr[row][col] == num)
            {
                return new Position(row, col);
            }
        }
    }
    return null;
}

第二问

再遍历一遍,创建一个object的二维数组很基本,必须掌握。

public static Position[][] getSuccessorArray(int[][] intArr)
{
    Position[][] newArr = new Position[intArr.length][intArr[0].length];

    for (int row=0; row < intArr.length; row++)
    {
        for (int col=0; col < intArr[0].length; col++)
        {
            newArr[row][col] = findPosition(intArr[row][col]+1, intArr);
        }
    }
    return newArr;
}

陈 欣

AADPS创始人

0 条评论

发表回复