Hello, dear friend, you can consult us at any time if you have any questions, add WeChat: daixieit

CS9053 Introduction to Java

Midterm

1. In Java, as in most programming languages, * is multiplication, + is addition, - is subtraction, and / is division.  What does that % operator do?

The remainder operator % divides number1 by number2 (roundsloating- point numbers to integers), and then returns only the remainder as result. The remainder operation in Java has the following properties:  for all int values A and all non-zero int values B: (A/B) * B + (A%B)  == A.  This means that when the remainder operation returns a nonzero result, it has the same sign as the left operand.

2.  What is the diference between an overridden and overloaded method?

Overloaded:

(1) Method overloading is a means for classes to handle diferent types of data in a uniied manner.  Multiple functions of the same name exist at the same time, with diferent number / type of parameters.  (Overloading is an expression of polymorphism in a class.)

(2) Java method overloading means that multiple methods can be cre- ated in the class, they have the same name, but have diferent parameters and diferent deinitions. When calling a method, the number of diferent pa- rameters and parameter types passed to themisused to decide which method to use. This is polymorphism.

(3) When overloading, the method name must be the same, but the pa- rameter type and number are diferent, and the return value type can be the same or diferent.  The return type cannot be used as a criterion for distin- guishing overloaded functions.

Overridden:

(1) The polymorphism between the parent class and the child class re- deines the parent class function.  If a method deined in a subclass has the same name and parameters as its parent class, we say that the method is overridden.  In Java, subclasses can inherit the methods in the parent class without rewriting the same method. But sometimes subclasses do not want to inherit the methods of the parent class intact, but want to make certain modiications, which requires the use of method rewriting.

(2) If the method in the subclass has the same method name, return type, and parameter list as a method in the parent class, the new method will overwrite the original method.  If you need the original method in the parent class, you can use the super keyword, which refers to the parent class of the current class.

(3) The access modiication permission of the subclass function cannot be less than that of the parent class;

In summary,  the same method can make diferent treatments  accord- ing to the diferent input data, that is, the method overload has diferent parameter lists (static polymorphism).

And when the subclass inherits the same method from the parent class, the input data is the same, but to make a response that is diferent from the parent class, you have to override the parent class method, that is, override the method in the subclass.   Same  parameters,  diferent  implementations (dynamic polymorphism).

3.  When multiplying an int value and a loat value, what will be the type of the result?

The result will be a loat type.  Transition to the highest precision among the types of operands participating in the operation, so the answer is the loat type. If there is a decimal to participate in the operation, it is of type double, because java default decimal direct quantity is of type double.

4. You have an array of objects called “objs” that contains a list of Integer objects.  It was declared like this:  Object[]    objs It doesn’t matter how the Integer objects got there or what their values are. You have a variable int intVal.  Write some code (this should just take at most 2 lines, but you could do it in 1 line) that gets the integer value of the irst object in the objs array and assigns that value to intVal.  .

int   intVal     =     (int)   objs[0];

5.Take that object from the array.The result of (new Object()).toString() is something like java.lang.Object@15db9742, lets say we execute

the following:

objs[5] = newInteger(20); ObjectmyObj = objs[5];

What is the output of myObj.toString()?  Explain why.

The output is 20.  Because Integer is a subclass of Object, and toString () function is overridden.

The toString method of class Object returns a string that includes the name of the class for which the object is an instance, the symbol ”@” and the unsigned hexadecimal representation of the object’s hash

”java.lang.Object@15db9742”  gets  from  ”code.getClass().getName()  + ’@’ + Integer.toHexString(hashCode())”

6.You  have  two  strings:    String  s1  =   “Alice  and  String  s2  = Bob  What  is  the  result  of  (s1  ==  s2)  ?   What  is  the  result of s1.compareTo(s2) ?  Explain your answers  why each gives the result it does and what that means.

The answers are false and -1 . ”==” compares the referenced address in memory in java.  s1 and s2 have diferent addresses, so the answer is false. The compareTo () method compares two strings in lexicographic order.  The s1 string is less than the s2 string, so it returns a value less than 0;

7.  Remember in an earlier lecture when discussing Abstracts, In- terfaces, and Generics we had the class Fruit, declared as:  public abstract class Fruit  public Fruit(String name)  /*etc*/  /* etc */ . We created Apple and Orange objects. Why didn’t we ever simply do the following:  Fruit f = new Fruit(“Apple”); ?

Fruit is an abstract class and an abstract class cannot be instantiated. By the way, we need the Apple class and the Orange class to have diferent operations, not just diferent in name, so it is inconvenient to simply use a Fruit class to complete. But they also have some common attributes, so we abstracted a fruit class, and wrote apple and orange classes as its subclasses.

8.  In an earlier  lecture, we had two abstract classes, Animal and Fruit, from which we made various subclasses.  Some of those sub- classes implemented the interface Edible.  Why did we choose to make classes subclasses of Animal and Fruit, but have Edible as an interface?  To put the question more generally, why would you design an object as a subclass of another object vs.   why  would you  create  an  interface  and  have  an  object  implement  an  inter- face?   (There’s no single right answer to this question, but there are deinitely wrong answers)

The methods in the interface must be abstract, and there are only static variables and inal variables in the interface.  But the weight of the animal (the name of the fruit) cannot be static and inal, because diferent animals have diferent weights.   Moreover, there is no construction method in the interface.  We can implement the same method in the super class, such as setweight () in the Animal class, if Animal is an interface, it can not be so. So, we design an object as a subclass of another object.

But HowToEat can be one of the common methods of fruit class, so we can use the interface and implement it in the fruit subclass.

9.  Assume there is a ile data.txt that should contain two integers per line (eg, a sample line is “5 10”).  This program reads in each line and divides the irst number by the second number.

a)  This  is  not  going  to  compile  because  of the  IOExceptions raised by the FileReader and BuferedReader constructors.  Modify the code so it will compile.

Class  Main  {

public  static  void main(String[]  args)  {

try  {

file  =  new  FileReader( "data .txt ");

}  catch  (FileNotFoundException  e)  {

e.printStackTrace();

}

BufferedReader  fileInput  =  new  BufferedReader(file); String  inLine  =  null;

try  {

inLine  =  fileInput.readLine();

}  catch  (IOException  e)  {

e.printStackTrace();

}

while  (inLine!=  null)  {

String[]  numbers  =  inLine.split( "  ");

Integer  a  =  Integer.parseInt(numbers[0]);

Integer  b  =  Integer.parseInt(numbers[1]);

Integer  c  =  a/b;

System.out.println( "result  =  "  +  c);

try  {

inLine  =  fileInput.readLine();

}  catch  (IOException  e)  {

e.printStackTrace();

}

}

}

}

b) Add a try/catch block in the while loop to catch any Runtime exceptions.   What  Runtime  exceptions  could  be  raised that you might want to look out for?

(1)java.lang.NumberFormatException

if inLine has no Integer, then Integer a = Integer.parseInt(numbers[0]);” will have NumberFormatException.

(2)java.lang.ArrayIndexOutOfBoundsException

if numbers has only one element, then ”Integer b = Integer.parseInt(numbers[1]);” will have ArrayIndexOutOfBoundsException.

(3)java.lang.ArithmeticException

If b == 0, then Integer c = a / b;” will have the problem of ”Arith- meticException: / zero” .

10.  If we see a method and see which arguments it takes, how do we know if we can pass in a Lambda function?  Speciically, what kind of parameter type does a method have to accept for you to pass in a lambda function?

The parameter type is functional interface.  For the compiler to under- stand lambda expressions, the interface must contain exactly one abstract method.  If it contains multiple methods, the compiler will not be able to compile the lambda expression.  Such an interface is known as a functional interface.

11. Look at this code. The msgield of TimerMessage is private.  In the main method of the TimerMessageRunner class, if I executed System.out.println(tm.msg), I would get an error.   However, the TimePrinter method can access msg from the TimerMessage class without any problem. Why?

All member variables modiied by private are called private variables. It only allows access within this class,  no external class can  access it.   The TimePrinter method is a member function of the TimerMessage class, so it can access the private variable msg of the TimerMessage class.  But outside the TimerMessage class, the private variable msg is not directly accessible to the TimerMessageRunner class.

12.   The  following  code opens a window with a  Close”  button, but it does nothing. What do you need to add to the code so that when  you  press  the  Close”  button,  it  executes  System.exit(0), terminating the application?

public  TestFrame(){

closeButton.addActionListener((e)  ->  System.exit(0)  ); setSize(FRAME_WIDTH,  FRAME_HEIGHT);

this .setLayout(new  FlowLayout());

this .add(closeButton);

}

add code ”closeButton.addActionListener((e)- > System.exit(0));” in the public method TestFrame()