CS302 Exam 2 Spring 2013 Reference Solution Part I: Write a complete program import java.util.Scanner; public class EstimatePI { public static void main(String[] args) { Scanner scnr = new Scanner(System.in); System.out.print("Enter the number of darts: "); if ( !scnr.hasNextInt() ) errorMsg(); int darts = scnr.nextInt(); // random throws per trial if ( darts < 1 ) errorMsg(); // The simulation int side = 2; // the length of the side of a rectangle int radius = side/2; // the radius of the circle int inCircle = 0; for ( int p=0; p < darts; p++ ) { double x = Math.random()*side; double y = Math.random()*side; double d = Math.sqrt(Math.pow(x-radius,2)+ Math.pow(y-radius,2)); if ( d <= radius ) inCircle++; } double pi_est = 4.0*(inCircle/(double)darts); System.out.print("Darts IN="+inCircle); System.out.println(" PI="+pi_est); } private static void errorMsg() { System.out.println("Must [be|enter] a positive integer!"); System.exit(-1); } } Part II: Using pre-built classes 1. Write a code fragment... int MAX_CHARS = 140; for ( int i = 0; i < phrases.size(); i++ ) if ( phrases.get(i).numChars() > MAX_CHARS ) System.out.println( phrase.get(i).numChars() + " " + phrases.get(i) ); 2. Write a class method ... public static char getFirstUpperCaseLetter(String input) { char U = '-'; boolean found = false; for ( int i=0; !found && i < input.length(); i++ ) { if ( input.charAt(i) >= 'A' && input.charAt(i) <= 'Z' ) { U = input.charAt(i); found = true; } } return U; } 3. Write a class method ... public static boolean isPalindrome(String input) { boolean isP = true; for ( int i=0, j=input.length()-1; isP && i < j; i++, j-- ) if ( input.charAt(i) != input.charAt(j) ) isP = false; return isP; } Part III: Write an instantiable class... import java.util.ArrayList; public class BackPack { private ArrayList items; private String name; private boolean open; //REQUIRED PUBLIC MEMBERS (no additional public members may be added. public BackPack(String name, boolean open) { this.name = name; this.open = open; this.items = new ArrayList(); } @Override public String toString() { String s = name + "'s backpack contains " + items.size() + " items, "; if ( open ) return s + "and is open."; return s + "and is closed."; } public void addItem(String item) { items.add(item); } public void setOpen(boolean open) { this.open = open; } public boolean isOpen() { return open; } public int numItems() { return items.size(); } private String itemAt(int index) { if ( index >=0 && index < items.size() ) return items.get(index); return null; } } // end class BackPack Part IV 1. Write a class method ... public static void rotate( int [] a, boolean right ) { int t; if ( right ) { t = a[a.length-1]; for ( int i=a.length-1; i > 0; i-- ) a[i] = a[i-1]; a[0] = t; } else { t = a[0]; for ( int i=0; i < a.length-1; i++ ) a[i] = a[i+1]; a[a.length-1] = t; } } 2. Write a code fragment ... int [][] rValues = new int[rLetters.length][]; for ( i = 0; i < rValues.length; i++ ) { rValues[i] = new int[rLetters[i].length]; for ( int j = 0; j < rValues[i].length; j++ ) { rValues[i][j] = rLetters[i][j] - ’A’; } }