Digits FRQ asked you to work with an integer, an
ArrayList filled with
Integer objects, and then make a determination on that
ArrayList based on its contents.
For Part A you’re implementing the constructor. Below is my solution. It’s probably a little longer than it needs to be, but it does work and the logic is relatively simple.
First line instantiates
digitList. This is an important step. If you’re implementing a constructor on an AP exam odds are very good that you’ll be either instantiating or setting values, or both, for instance variables.
Next we look and see if
num is zero. This was a special case in the problem description in that it should put a zero into
num is greater than zero we’ll go into a
while loop and pull off each digit individually. The
n>0 is why we needed to check for zero first.
In each loop the code gets the remainder of dividing
n by 10 using the
% operator. That number is added to
digitList at the beginning.
n % 10 gives us the last digit. If we just added it to
digitList would be backwards when we finished.
We then divide
n by 10 to chop off the last digit.
mod and divide
Let’s look a little more at why we’re modding and dividing by 10 each time. For this you’re going to need to think back to second or third grade when you first learned to divide.
Do you remember remainders? What’s the remainder from \(14 \div 3\)?
Well, 3 goes in to 14 evenly 4 times. \(3 \times 4 = 12\) and \(14 – 12 = 2\) so the remainder is 2.
We can shorted that a bit with \(14 \% 3 = 2\). % is the Java operator for mod, which calculates the remainder.
The reason that’s important for this problem is that any time you divide a number by 10 the remainder is equal to the last digit. For example, \(13256 \% 10 = 6\). This lets us chop off the last digit of a number.
Now that we have the last digit, how do we get rid of it. For that, we divide. \(13256 \div 10 = 1325\). The 6 is gone. Remember, in Java when you divide an
int the result must also be an
int so we’re not going to worry about decimals.
n % 10 to
digitList that puts the last digit into the
n /= 10 divides
n by 10 to get rid of the last digit.
Do While Loop
Had this not shown up on an AP exam, I would have solved it a bit differently. I would have used a do while loop instead. It’s quite a bit shorter. And you could have certainly done it this way. But since a do while loop is out of scope of the AP Java subset, it’s not an expected answer.
Back from our sidetrack, let’s move on to Part B.
The task for Part B was to implement the
isStrictlyIncreasing method to determine whether in the list of integers each number was greater than the previous number. To do that we’re going to loop through
A couple things to notice here.
First, we’re not looping all the way to the end of
digitList. The code stops at the the value second from the end. This is important because we’re comparing a value in position
i with the value in position
i + 1. If the loop went all the way to the end of
digitList it would go out of bounds.
And second, we’re comparing the numbers with \(\ge\) instead of just \(\gt\). The problem description stated that each number had to be greater than, not greater than or equal to, the previous value.
if is true, then we return
false because that means the list isn’t increasing. If we make it all the way through the loop we’ll return
true because we never found a case where one number wasn’t greater than the previous value.