# Lab 11 ## Exercise 1 You are given the Java classes `Circle`, `Rectangle` and `Test` below. ```java public class Circle { private double radius; public Circle(double r) { radius = r; } public double area() { return radius * radius * Math.PI; } } public class Rectangle { private double length; private double width; public Rectangle(double l, double w) { length = l; width = w; } public double area() { return length * width; } } public class Test { public static void main(String[] args) { Rectangle r = new Rectangle(30.1, 10.2); Circle c = new Circle(5.3); System.out.println("r=" + r); System.out.println("c=" + c); } } ``` Execute `Test` and write down the output. ``` r=Rectangle@19e1023e c=Circle@3a4afd8d # RAM address ``` ## Exercise 2 You are given the Java classes `Test2` below. Execute the program together with the `Rectangle` class in Exercise 1. ```java public class Test2 { public static void main(String[] args) { Rectangle r = new Rectangle(1, 2); System.out.println("r=" + r); System.out.println("area=" + r.area()); r = new Rectangle(3, 4); System.out.println("r=" + r); System.out.println("area=" + r.area()); r = null; System.out.println("r=" + r); System.out.println("area=" + r.area()); } } ``` Execute `Test2` and write down the output. Can you explain the output? ``` r=Rectangle@27ddd392 area=2.0 r=Rectangle@2a098129 area=12.0 r=null Exception in thread "main" java.lang.NullPointerException ``` ## Exercise 3 You are given the Java classes `Triangle` below. ```java public class Triangle { private int base; private int height; public Triangle() { base = 0; height = 0; } public Triangle(int base, int height) { this.base = base; this.height = height; } public void printThis() { System.out.println(this); } public static void main(String[] args) { Triangle t = new Triangle(1, 2); System.out.println(t); t.printThis(); } } ``` Execute `Triangle` and write down the output. Can you explain the output? Discuss what `this` is in an object instance. ``` Triangle@6504e3b2 Triangle@6504e3b2 # RAM Address ``` ## Exercise 4 You are given the Java classes Date and DateUser below. ```java public class Date { private int day; private int month; private int year; public Date() { this(1, 1, 1970); } public Date(int day, int month, int year) { this.day = day; this.month = month; this.year = year; } public String toString() { return "[" + day + "/" + month + "/" + year + "]"; } } public class DateUser { public static void main(String[] args) { Date d1 = new Date(); System.out.println(d1); } } ``` (a) Execute `DateUser` and observer the output. Can you explain the purpose of the program statement “`this(1, 1, 1970)`” in the no-argument constructor of `Date`? (b) Remove the `toString()` method from the `Date` class. Compile and execute the program again. What is the difference? ``` # (a) [1/1/1970] # (b) Date@28a418fc # RAM Address ``` ## Exercise 5 Consider the following class. ```java public class QuestionOne { public final int A = 345; public int b; private float c; private void methodOne(int a) { b = a; } public float methodTwo() { return 23; } } ``` Identify the invalid statements in the program below. For each invalid statement, state why it is invalid. ```java public class Q1Main { public static void main(String[] args) { QuestionOne q1 = new QuestionOne(); //line1 q1.A = 12; //line2 q1.b = 12; //line3 q1.c = 12; //line4 q1.methodOne(12); //line5 q1.methodOne(); //line6 System.out.println(q1.methodTwo()); //line7 q1.b = q1.methodTwo(); //line8 } } ``` ``` Q1Main.java:17: cannot assign a value to final variable A q1.A = 12; ^ Q1Main.java:19: c has private access in QuestionOne q1.c = 12; ^ Q1Main.java:21: methodOne(int) has private access in QuestionOne q1.methodOne(12); ^ Q1Main.java:22: methodOne(int) in QuestionOne cannot be applied to () q1.methodOne(); ^ Q1Main.java:24: possible loss of precision found : float required: int q1.b = q1.methodTwo(); ^ 5 errors Tool completed with exit code 1 ``` ## Exercise 6 Suppose that the class `Foo` is defined as below. ```java public class Foo { public int i; public static String s; public void imethod() { } public static void smethod() { } } ``` Let f be an instance of `Foo`. Determine if each of the following Java statements is valid or invalid. | Code | valid | invalid | | ---- | ----- | ------- | | System.out.println(f.s); | [x] | [] | | f.smethod(); | [x] | [] | | System.out.println(Foo.i); | [] | [x] | | System.out.println(Foo.s); | [x] | [] | | Foo.imethod(); | [] | [x] | | Foo.smethod(); | [x] | [] | ## Exercise 7 A `Point` object instance represents a Cartesian coordinate and thus has two member variables, x and y. The Java program `Distance` below instantiates two `Point` object instances to represent the coordinates (4, 5) and (11, 4). The program then displays the distance between the two coordinates by invoking the `distance()` method in the `distance() `method. Expression to get the distance of two Points (x1, y1) (x2, y2) is `distance = Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));` ``` C:\> java Ex7 Distance = 7.0710678118654755 ``` ```java public class Ex7 { public static void main(String[] args) { Point p1 = new Point(4, 5); Point p2 = new Point(11, 4); System.out.println("Distance = " + p1.distance(p2)); } } ``` Complete the `Point` class. ```java public class Point { private int x; private int y; public Point() { this(0, 0); } public Point(int x, int y) { setPoint(x, y); } public void setPoint(int x, int y) { if (x >= 0 && y >= 0) { this.x = x; this.y = y; } } public int getX() { return x; } public int getY() { return y; } public double distance(Point p) { // COMPLETE THIS METHOD } } ``` ## Exercise 8 Study the validity of the programs below. Correct those invalid statements. ```java public class Student { public static int numberOfStudent = 0; //line 1 public String name; //line 2 public void Student(String name) { //line 3 numberOfStudent++; //line 4 setName(name); //line 5 } public int getNumberOfStudent() { //line 6 return; //line 7 } public String setName(String name) { //line 8 name = name; //line 9 } } public class Ex8 { public static void main(String args[]) { Student stu1 = new Student("John Chan"); //line 10 System.out.println(numberOfStudent); //line 11 System.out.println(name); //line 12 } } ``` ``` C:\> java Ex8 1 John Chan ```