2013 Download Info
<< 2003 TreasureMap | APQuestionsTrailIndex | 2013 TokenPass >>
Click here to see the questions from 2013
MusicDownloadsTester.java
import java.util.ArrayList; import java.util.List; public class MusicDownloadsTester { public static void main(String[] args) { MusicDownloads webMusicA = new MusicDownloads(); webMusicA.add(new DownloadInfo("Hey Jude",5)); webMusicA.add(new DownloadInfo("Soul Sister",3)); webMusicA.add(new DownloadInfo("Aqualung",10)); System.out.println("Part A tests:"); System.out.println("webMusicA has:\n"+webMusicA); System.out.println( getDownloadInfoTest(webMusicA, "Aqualung") +" [expected found at 2]"); System.out.println( getDownloadInfoTest(webMusicA, "Happy Birthday") +" [expected null]"); String found = getDownloadInfoTest(webMusicA, "Aqualung"); found+=getDownloadInfoTest(webMusicA, "Happy Birthday"); String expected="'Aqualung' found at 2'Happy Birthday' returned a null"; if (found.equals(expected)) System.out.print("No "); System.out.println("problems found in part (a)\n"); System.out.println("Part B tests:"); MusicDownloads webMusicB = new MusicDownloads(); webMusicB.add(new DownloadInfo("Hey Jude",5)); webMusicB.add(new DownloadInfo("Soul Sister",3)); webMusicB.add(new DownloadInfo("Aqualung",10)); System.out.println("Before the call, webMusicB has:\n"+webMusicB); List<String> songTitles = new ArrayList<String>(); songTitles.add("Lights"); songTitles.add("Aqualung"); songTitles.add("Soul Sister"); songTitles.add("Go Now"); songTitles.add("Lights"); songTitles.add("Soul Sister"); webMusicB.updateDownloads(songTitles); System.out.println("After the call, webMusicB has:\n"+webMusicB); found = webMusicB.toString(); expected = "0) 'Hey Jude' 5 downloads\n1) 'Soul Sister' 5 downloads\n2) 'Aqualung' 11 downloads\n3) 'Lights' 2 downloads\n4) 'Go Now' 1 downloads\n"; if (found.equals(expected)) System.out.print("No "); System.out.println("problems found in part (b)"); } /** * this tester method has spoilers, * so don't look too carefully if you're still * working on the part (a) solution */ public static String getDownloadInfoTest(MusicDownloads md, String title){ DownloadInfo di = md.getDownloadInfo(title); if (di == null) return "'"+title+"'"+" returned a null"; List<DownloadInfo> list = md.getList(); int i=0; boolean found=false; while (i<list.size() && !found){ String s = list.get(i).getTitle(); if (s.equals(title)) found=true; else i++; } if (!found) return "'"+title+"'"+" not found but NOT null"; return "'"+title+"'"+" found at "+i; } }
DownloadInfo.java
public class DownloadInfo { private String title; private int count; /** Creates a new instance with the given unique title and sets the * number of times downloaded to 1. * @param title the unique title of the downloaded song */ public DownloadInfo(String title) { //this implementation was not shown this.title=title; count=1; } //this implementation was not shown public DownloadInfo(String title, int count) { this(title); this.count=count; } /** @return the title */ public String getTitle() { return title; } /** Increment the number times downloaded by 1 * */ public void incrementTimesDownloaded() { count++; } // There may be instance variables, constructors, and methods that are not shown. public String toString(){ return "'"+getTitle()+"' "+count+" downloads"; } }
MusicDownloads.java
import java.util.ArrayList; import java.util.List; public class MusicDownloads { /** The list of downloaded information. * Guaranteed not to be null and not to contain duplicate titles. */ private List<DownloadInfo> downloadList; /** Creates the list of downloaded information. */ public MusicDownloads() { downloadList = new ArrayList<DownloadInfo>(); } /** Returns a reference to the DownloadInfo object with the requested title if it exists. * @param title the requested title * @return a reference to the DownloadInfo object with the * title that matches the parameter title if it exists in the list; * null otherwise. * * Postcondition * - no changes were made to downloadList */ public DownloadInfo getDownloadInfo(String title) { // part (a) return null; // replace this line with your code } /** Updates downloadList with information from titles. * @param titles a list of song titles * Postcondition: * - there are no duplicate titles in downloadList. * - no entries were removed from downloadList. * - all songs in titles are represented in downloadList. * - for each existing entry in downloadList, the download count is increased by * the number of times its title appeared in titles. * - the order of the existing entries in downloadList is not changed. * - the first time an object with a title from titles is added to downloadList, it * is added to the end of the list. * - new entries in downloadList appear in the same order * in which they first appear in titles. * - for each new entry in downloadList, the download count is equal to * the number of times its title appeared in titles */ public void updateDownloads(List<String> titles) { // part (b) } // other methods to get the examples to work public void add(DownloadInfo d){ downloadList.add(d); } public List<DownloadInfo> getList(){ return downloadList; } public String toString(){ String result =""; for (int i=0; i< downloadList.size(); i++) result+= i+") "+downloadList.get(i).toString()+"\n"; return result; } }