CS-140 Fall 2018 Test 2 Version Practice Nov. 12, 2018 Name: 1. (10 points) For the following, Check T if the statement is true, or F if the statement is false. (a) T F : If a child overrides its parent s method, it can still invoke the parent method with the super keyword, but if it does so, then it must invoke the parent method first. (b) T F : It is possible to create a concrete class in Java which does not support the tostring method. (c) T F : The compiler will not compile a concrete class which implements an interface, but fails to implement all the methods in that interface. (d) T F : A GUI contains code that manipulates a rectangular array of pixels, where each pixel is represented by three color values. (e) T F : An abstract class is used to prevent a child class from overriding specific methods (such as a checkpassword method.) (f) T F : Under the covers, the backing store for an ArrayList is an array of Object references. (g) T F : In Java there is an expectation that if two objects are equal, they will have the same hashcode. (h) T F : An interface defines the list of fields that must be provided by a class that implements that interface (i) T F : An abstract class can implement an interface without implementing all the methods in the interface. The methods not yet implemented are considered abstract methods. (j) T F : A child class cannot inherit the class methods of its parent. 2. (5 points) Given an array of strings such as String [] arr = { abc, acd,... ;, check all of the following which are valid ways to convert the array into an arraylist. List<String> list = new ArrayList<>(); for(string str : arr) list. add(str); List<String> list = arr; List<String> list = new ArrayList<>(); list.addall(arrays.aslist(arr)); List<String> list = arr.toarraylist(); List<String> list = new ArrayList<>(Arrays.asList(arr)); String [] list = new ArrayList<>(Arrays.asList(arr)); Page 1 of 11
3. (5 points) In the java library, there is an interface called CharSequence, which defines the methods charat(int index), chars(), length(), subsequence(int start, int end), and tostring(). Note that the String class implements the CharSequence interface. Given the following Java line of code: CharSequence csq = Welcome to Java! ; Check all of the following which are valid invocations of methods: csq.length() csq.charat(3) csq.concat( Enjoy the ride! ) csq.equals( Bienvenido a Java ) CharSequence.subSequence(0,3) Answer the following questions by filling in the blanks. 4. (10 points) Given the following Java lambda expressions and argument values, what result will the lambda expression produce? (a) x >x+3 with argument 3.0, (a) (b) x > x x + 2 x + 1 with argument 3, (b) (c) (x,y) >(x y) (x y) with arguments 9 and 2 (c) (d) (x,y) >x.lst.compareto(y.lst)==0? x.lst.compareto(y.lst) : x. fst. compareto(y.fst) with arguments n1 and n2 where n1 and n2 are objects with public fst and lst fields with values: n1[ fst= Tom lst= Smith ], n2[fst= Tom lst= Smith ] (d) (e) (x) > { if (0==x%2) return 0; if (0==x%3) return 3; return 1; with argument 21 (e) Page 2 of 11
5. (10 points) Given the Java classes in Listing 1 on page 7, Listing 2 on page 7, Listing 3 on page 7, and Listing 4 on page 7, (a) If you execute until just before the first for loop in the Debate main method, complete the following graphical display of memory: (b) If you run java -cp test2.debate, what will get printed to the screen? Page 3 of 11
6. (20 points) Given the class in Listing 5 on page 8, (a) What is the string produced by Frac f=new Frac(1,2); f.mult(new Frac(1,3)).toString()? (b) Write the code for the add method of the Fraction class so that fraction addition is performed using a the formula: b + c d = ad+bc bd. (c) Given two instances of class Fraction, Fraction frac1 and Fraction frac2, such that frac1. hashcode()==frac2.hashcode(), will frac1. equals( frac2) be true? Why or why not? (d) Given two instances of class Fraction, Fraction frac1 and Fraction frac2, such that frac1.equals(frac2), will frac1==frac2 be true? Why or why not? (e) (5 points (bonus)) If you create a new Fraction(3,0), will the Fraction class work? If not, what is the first code that will break? Page 4 of 11
7. (10 points) Given the Java class in Listing 6 on page 8: (a) The constructor for the Square class invokes the getfont routine to get the value of the Font field associated with this square. How can the value for the font field be anything other than null, since this Square object has just been created? (b) The actionperformed method does not use the argument ActionEvent arg0. Why is it valid for the actionperformed method to ignore its argument? (c) Once the choose method is invoked on a specific Square object, can the actionperformed method ever get invoked? (d) The actionperformed method returns immediately instead of allowing the computer to have a turn if the TicTacToe checkwinner method returns a true value. Can you speculate what the return value from checkwinner means? Page 5 of 11
8. (10 points) For the following question, refer to the zoo package in Listing 7 on page 9, Listing 8 on page 9, Listing 10 on page 10, Listing 9 on page 9, and Listing 11 on page 10 (a) What would get printed to the screen if you run the main method from the Zoo class? (b) Write a new sub-class of animal to put in a zoo. Your class should have a no-argument constructor. (c) Which line of code in the zoo package demonstrates the concept of polymorphism? Explain why that line shows polymorphism. 9. (10 points) What will get printed by the main method in the Java code in Listing 12 on page 10? 10. (10 points) What output is produced by the main method in the Mapper class in Listing 13 on page 11: Page 6 of 11
Tear-off Pages Listing 1: Subconscious.java public class Subconscious { private S t r i n g name ; public Subconscious ( S t r i n g name) { this. name = name ; public S t r i n g getname ( ) { return name ; public void pr omi se ( ) { System. out. p r i n t l n (name + promises not to keep any promises. ) ; public void claim ( ) { System. out. p r i n t l n (name + w i l l r u l e the world! ) ; Listing 2: Red.java public class Red extends Subconscious { public Red( S t r i n g name) { super (name ) ; @Override public void pr omi se ( ) { System. out. p r i n t l n ( super. getname()+ w i l l b u i l d a wall. ) ; @Override public void claim ( ) { System. out. p r i n t l n ( super. getname()+ w i l l make America g r e a t again. ) ; Listing 3: Blue.java public class Blue extends Subconscious { public Blue ( S t r i n g name) { super (name ) ; @Override public void pr omi se ( ) { System. out. p r i n t l n ( super. getname()+ w i l l pay your c o l l e g e t u i t i o n. ) ; @Override public void claim ( ) { System. out. p r i n t l n ( super. getname()+ says we re s t r o n g e r t o g e t h e r! ) ; Listing 4: Debate.java public class Debate { public static void main ( S t r i n g [ ] args ) { Blue dem = new Blue ( H i l l a r y ) ; Red rep = new Red( Donald ) ; Subconscious [ ] p a r t i e s = { rep, dem ; for ( Subconscious party : p a r t i e s ) { party. promise ( ) ; for ( Subconscious party : p a r t i e s ) { party. claim ( ) ; Page 7 of 11
Tear-off Pages Listing 5: Fraction.java public class Fraction { private long numerator ; private long denominator ; public Fraction ( long numerator, long denominator ) { this. numerator = numerator ; this. denominator = denominator ; normalize ( ) ; public double todouble ( ) { return ( double ) numerator / denominator ; public void normalize ( ) { i f ( denominator <0) { denominator= denominator ; numerator= numerator ; long g = gcd (Math. abs ( numerator ), denominator ) ; i f ( g>1) { numerator /=g ; denominator /=g ; public Fraction add ( Fraction that ) { // Code not s u p p l i e d public Fraction mult ( Fraction that ) { return new Fraction ( this. numerator that. numerator, this. denominator that. denominator ) ; @Override public int hashcode ( ) { f i n a l int prime = 3 1 ; int r e s u l t = 1 ; r e s u l t = prime r e s u l t + ( int ) ( denominator ˆ ( denominator >>> 3 2 ) ) ; r e s u l t = prime r e s u l t + ( int ) ( numerator ˆ ( numerator >>> 3 2 ) ) ; return r e s u l t ; @Override public boolean e q u a l s ( Object obj ) { i f ( this == obj ) return true ; i f ( obj == null ) return f a l s e ; i f ( g e t C l a s s ( )!= obj. g e t C l a s s ( ) ) return f a l s e ; Fraction other = ( Fraction ) obj ; i f ( denominator!= other. denominator ) return f a l s e ; i f ( numerator!= other. numerator ) return f a l s e ; return true ; @Override public S t r i n g t o S t r i n g ( ) { return Fraction [ numerator= + numerator +, denominator= + denominator + ] ; static private long gcd ( long x, long y ) { i f ( x==y ) return x ; i f ( x<y ) return gcd ( y x, x ) ; return gcd ( x y, y ) ; Listing 6: Square.java public class Square extends JButton implements A c t i o n L i s t e n e r { Page 8 of 11
Tear-off Pages private static f i n a l long s erialversionuid = 1L ; int row ; int c o l ; TicTacToe game ; public Square ( TicTacToe game ) { this. game = game ; setfont ( getfont ( ). derivefont ( ( float ) 4 0. 0 ) ) ; s e t P r e f e r r e d S i z e (new Dimension ( 7 0, 7 0 ) ) ; setmargin (new I n s e t s ( 30, 30, 30, 30)); settext ( ) ; addactionlistener ( this ) ; public void choose ( S t r i n g val ) { settext ( val ) ; setenabled ( f a l s e ) ; @Override public void actionperformed ( ActionEvent arg0 ) { choose ( X ) ; i f ( game. checkwinner ( ) ) return ; game. computerturn ( ) ; game. checkwinner ( ) ; Listing 7: Animal.java package zoo ; public class Animal { S t r i n g food ; S t r i n g motion ; S t r i n g k i d s ; public Animal ( S t r i n g food, S t r i n g motion, S t r i n g k i d s ) { this. food = food ; this. motion = motion ; this. k i d s = k i d s ; S t r i n g eat ( ) { return I eat + food +. ; S t r i n g move ( ) { return I move + motion +. ; S t r i n g b i r t h ( ) { return I j u s t had + k i d s +. ; Listing 8: Tiger.java package zoo ; public class Tiger extends Animal{ public Tiger ( ) { super ( small animals, s i l e n t l y and s n e a k i l y, two cubs ) ; pacakge zoo ; Listing 9: Elephant.java Page 9 of 11
Tear-off Pages public c l a s s Elephant extends Animal { public Elephant ( ) { super ( l e a v e s and g r a s s, with a lumbering walk, one c a l f ) ; Listing 10: Snake.java package zoo ; public c l a s s Snake extends Animal { public Snake ( ) { super ( mice, on my b e l l y, 20 h a t c h l i n g s ) ; @Override S t r i n g b i r t h ( ) { return I l e f t 20 eggs to hatch. ; Listing 11: Zoo.java package zoo ; public class Zoo { ArrayList <Animal> animals ; public Zoo ( ) { this. animals = new ArrayList<Animal >(); public boolean add ( Animal e ) { return animals. add ( e ) ; public s t a t i c void main ( S t r i n g [ ] a r g s ) { Zoo zoo=new Zoo ( ) ; zoo. add (new Elephant ( ) ) ; zoo. add (new Tiger ( ) ) ; zoo. add (new Snake ( ) ) ; for ( Animal a : zoo. animals ) { System. out. p r i n t l n ( a. eat ( ) + + a. move ( ) + + a. b i r t h ( ) ) ; public class LinkedList { private int value ; private LinkedList next ; Listing 12: LinkedList.java public LinkedList ( int value ) { this. value = value ; public LinkedList add ( int value ) { i f ( next==null ) next=new LinkedList ( value ) ; else next. add ( value ) ; return this ; public int get ( int n ) { i f ( n==0) return value ; i f ( next==null ) throw new IllegalArgumentException ( I l l e g a l index ) ; return next. get (n 1); public LinkedList r e v e r s e ( ) { i f ( next==null ) return this ; return next. r e v e r s e ( ). add ( value ) ; public S t r i n g t o S t r i n g ( ) { S t r i n g r e s u l t= + value ; i f ( next!= null ) r e s u l t = r e s u l t + > + next. t o S t r i n g ( ) ; Page 10 of 11
Tear-off Pages return r e s u l t ; public s t a t i c void main ( S t r i n g [ ] a r g s ) { LinkedList l s t = new LinkedList ( 2 1 ) ; l s t. add ( 3 3 ) ; l s t. add ( 1 9 ) ; l s t. add ( 4 4 ) ; l s t. add ( 1 9 ) ; l s t. add ( 1 9 ) ; System. out. p r i n t l n ( The t h i r d element i s + l s t. get ( 2 ) ) ; System. out. p r i n t l n ( L i s t : + l s t ) ; l s t=l s t. r e v e r s e ( ) ; System. out. p r i n t l n ( The t h i r d element i s now + l s t. get ( 2 ) ) ; System. out. p r i n t l n ( L i s t : + l s t ) ; import java. u t i l. Arrays ; import java. u t i l. f u n c t i o n. Function ; Listing 13: Mapper.java public class Mapper { public double [ ] map( double [ ] rawdata, Function<Double, Double> f n ) { double [ ] r e s u l t=null ; i f ( rawdata!= null ) { r e s u l t = new double [ rawdata. l e n g t h ] ; for ( int i =0; i <rawdata. l e n g t h ; i ++) { r e s u l t [ i ]= fn. apply ( rawdata [ i ] ) ; return r e s u l t ; public s t a t i c void main ( S t r i n g [ ] a r g s ) { Mapper f o r a l l = new Mapper ( ) ; double [ ] data = { 1. 5, 2. 5, 3. 5, 4. 5 ; double [ ] big = f o r a l l. map( data, d >{ i f (d>3.0) return d ; else return 3. 0 ; ) ; double [ ] l i t t l e = f o r a l l. map( data, d >(d<=3.0)?d : 3. 0 ) ; System. out. p r i n t l n ( Big : + Arrays. t o S t r i n g ( big ) ) ; System. out. p r i n t l n ( L i t t l e : + Arrays. t o S t r i n g ( l i t t l e ) ) ; Page 11 of 11