345 lines
7.2 KiB
Plaintext
345 lines
7.2 KiB
Plaintext
# 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
|
|
``` |