- (25%) What does the following program print out when run?
public class Q1 {
public static boolean swing (int strength) throws Exception{ if (strength < 5) throw new Exception("Too weak"); if (strength > 10) return false; return true; }public static void main(String[] args) { int[] strengths = {5,6,-1,12}; for (int s : strengths) { try { if (swing(s)) System.out.println("Homerun"); else System.out.println("Strike!"); } catch (RuntimeException e){ System.out.println("You are OUT!"); } catch (Exception e) { System.out.println(e.getMessage()); } } System.out.println("Done."); } }
- (25%)Given a text file called sales.txt which contains data that looks like
aba 55.99 akdkd8dj 12.95 iwjwhe 4 Iji8keJl 44.99 ijdddawe 10.00 ...and so on for many more rows...
where each row represents one item that is for sale in a store. The first column is a String that uniquely identifies the item and the second column is a double that represents the price of the item. Write a program which
- Implements a simple
Item
class that can represent one item. - In the
main
, your program reads the complete contents of the file sales.txt into anArrayList<Item>
variable calleditems
.
Answer:
public class Item { private String sku; private double price; public Item(String sku, double price){ this.sku = sku; this.price = price; } public String toString(){ return sku + " " + price; } public static void main(String[] args) { try { Scanner in = new Scanner(new FileInputStream("sales.txt")); ArrayList<Item> items = new ArrayList<Item>(); while (in.hasNext()){ String sku = in.next(); double price = in.nextDouble(); items.add(new Item(sku,price)); } System.out.println(items); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
- Implements a simple
- (25%) Read over the code below and implement the empty method.
import java.util.ArrayList; public class Q3 { private ArrayList<Q3> data; private Integer number; public Q3(Integer number){ data = new ArrayList<Q3>(); this.number = number; } public void add(Q3 q){ data.add(q); } public void add(Integer number){ data.add(new Q3(number)); } /** * Calculates and returns the sum of all even numbers in * this object or in any of the ones in 'data', and so on * recursively. * @return The sum. */ public int sumEven(){ //TODO: implement this method int result = 0; if (number % 2 == 0) result = number; for (Q3 q: data){ result += q.sumEven(); } return result; } public static void main(String[] args) { Q3 q = new Q3(0); Q3 first = new Q3(1); q.add(first); Q3 second = new Q3(2); q.add(second); q.add(3); q.add(4); first.add(8); second.add(5); System.out.println(q.sumEven()); } }
For example, when the main above is run it should print out14
- (25%) Implement a method
String mostFrequent(String s)
which returns the 3-character substring that appears most frequently ins
, or one of the most frequent if there is a tie. For examplemostFrequent("AABABA") returns "ABA" because "ABA" appears twice mostFrequent("AAAAAB") returns "AAA" because it appears 3 times mostFrequent("ATATATA") returns "ATA" because it appears 3 times
Answer:public static String mostFrequent(String seq){ HashMap<String, Integer> count = new HashMap<String, Integer>(); int max = 0; String maxKey = null; //add them all for (int i = 0; i <= seq.length() - 3; i++) { String key = seq.substring(i,i+3); if (count.containsKey(key)) count.put(key, count.get(key) + 1); else count.put(key, 1); if (count.get(key) > max){ max = count.get(key); maxKey = key; } } return maxKey; }
And, the other one:
- (25%) What does the following program print out when run?
public class Q1 {
public static boolean pitch (String type) throws Exception { if (type.startsWith("f")) return true; if (type.startsWith("c")) return false; if (type.startsWith("x")) throw new Exception("Oops"); return true; }public static void main(String[] args) { String[] types = {"fast", "foo", "curve", "xoom"}; for (String t : types) { try { if (pitch(t)) System.out.println("Hit"); else System.out.println("Miss"); } catch (RuntimeException e){ System.out.println("You hit the umpire"); } catch (Exception e) { System.out.println(e.getMessage()); } } System.out.println("Done."); } }
- (25%) Given a text file called points.txt which contains data that looks like
1.44 5.666 12.999 0 9.163 3.1415 6 7 5 6.999 ...and so on for many more rows...
where each row represents the x and y coordinates of a point in 2-dimensional space. Both columns are doubles. Write a program which
- Implements a simple
Point
class that can represent one point in space. - In the
main
, your program reads the complete contents of the file points.txt into anArrayList<Point>
variable calledpoints
.
Answer:
public class Point { private double x; private double y; public Point(double x, double y){ this.x = x; this.y = y; } public String toString(){ return "(" + x + "," + y + ")"; } public static void main(String[] args) { try { Scanner in = new Scanner(new FileInputStream("points.txt")); ArrayList<Point> points = new ArrayList<Point>(); while (in.hasNext()){ double x= in.nextDouble(); double y = in.nextDouble(); points.add(new Point(x,y)); } System.out.println(points); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
- Implements a simple
- (25%) Read over the code below and implement the empty method.
import java.util.ArrayList; public class Q3 { private ArrayList<Q3> data; private Integer number; public Q3(Integer number){ data = new ArrayList<Q3>(); this.number = number; } public void add(Q3 q){ data.add(q); } public void add(Integer number){ data.add(new Q3(number)); } /** * Find if x is either equal to number, or equal to one of * the numbers in 'data', and so on recursively. * @param x the number we are looking for * @return true if x is there, false otherwise. */ public boolean find(Integer x){ //TODO: implement this method if (number == x) return true; for (Q3 q : data) { if (q.find(x)) return true; } return false; } public static void main(String[] args) { Q3 q = new Q3(0); Q3 first = new Q3(1); q.add(first); Q3 second = new Q3(2); q.add(second); q.add(3); q.add(4); first.add(8); second.add(5); System.out.println(q.find(3)); System.out.println(q.find(5)); System.out.println(q.find(10)); } }
For example, when the main above is run it should print
outtrue true false
- (25%) Implement a method
String mostPoints(String[] name, int[] points)
which returns the name that has the most points, assuming that for all indecesi
we have thatpoints[i]
has the number of points forname[i]
. For exampleString[] name1 = {"a", "b", "c", "a", "b", "a"}; int[] points1 = { 1, 2, 7, 4 , 3, 1}; mostPoints(name1, points1); //returns "c" because it has 7 // points and "a" has 6, and "b" has 5. String[] name2 = {"a", "b", "c", "a", "b", "a"}; int[] points2 = { 5, 2, 7, 4 , 3, 1}; mostPoints(name2, points2); //returns "a" String[] name3 = {"a", "a", "a", "a", "b", "c"}; int[] points3 = { 1, 1, 1, 1 , 3, 2}; mostPoints(name3, points3); //returns "a"
Answer:public static String mostPoints(String[] name, int[] points){ HashMap<String, Integer> count = new HashMap<String, Integer>(); int max = 0; String maxKey = null; for (int i = 0; i < points.length; i++) { if (count.containsKey(name[i])) count.put(name[i], points[i] + count.get(name[i])); else count.put(name[i], points[i]); if (count.get(name[i]) > max){ max = count.get(name[i]); maxKey = name[i]; } } return maxKey; }
No comments:
Post a Comment