Java Lab - CUHK CSE

CSC1030 HANDS-ON INTRODUCTION TO JAVA Lab Exercise #5. Due on 3 ...
Write a static factorial(int n) method which takes an integer parameter n to
calculate and to return n-factorial as a long value. ... The constructor needs NOT
check/ validate the value of the parameter, for example, negative or zero vector
size.

Part of the document


CSC1030 HANDS-ON INTRODUCTION TO JAVA Lab Exercise #5
Due on 3 March 18:00

Firstly, download the lab package from our course web:
http://www.cse.cuhk.edu.hk/~pffung/csc1030/

Problem 1 (File I/O & Exception Handling)

1. Study the code RobustFileProcessor.java in the lab package. The program
has some errors. Add throws declaration in relevant methods to make the
program compile and run.

2. If we attempt to open a file for reading in step 1, under the condition
of file does not exist, an exception will be thrown (what is the
exception?)

3. Use a try block in main() method to create a robust program to read a
text file with name specified during run time using keyboard input by
the user. The input prompt should be:

Please input filename for reading:

If the file can't be opened, the program should print

File "xxxxx.xxx" does not exist.
Please input filename for reading:

And the file name input prompt will be repeated until obtaining a valid
filename. The program should then display all the content of the file
to the standard output, i.e. screen.

Problem 2 (Robust Exception Handling)

You can create your own exceptions to handle program specific conditions
(called assertion in other languages such as C), which is easy to write and
it adds robustness to code.

1. Study the code Counter.java in the lab package. Try executing it to
observe the result.

2. Finish the given Java class TestOwnException. Write a static
factorial(int n) method which takes an integer parameter n to calculate
and to return n-factorial as a long value. Note that 0! = 1 and n! = n
* (n-1) * (n-2) * ... * 1. The method throws an Exception with message
"incorrect n = ..." if the integer parameter n is negative or n is so
large that it would lead the method to compute an incorrect answer
because of integer overflow. There is a positive limit of the long type
in Java.

3. Test the above work in the main() method by printing a table of values
for n! for n = -1 to 30. Whenever the exception occurs, try-catch it
and print the exception object. The table format is:

java.lang.Exception: incorrect n = -1
0! = 1
1! = 1
2! = 2
3! = 6
...
java.lang.Exception: incorrect n = 29
java.lang.Exception: incorrect n = 30
Problem 3 (Array)

Background:

We are to create classes which can perform basic linear algebra tasks. For
example, vector representation, dot product, etc. The functions can be
tested and demonstrated with a given class LinearAlgebra (in lab package).

A LAVector object represents a vector in linear algebra. It is simply a
list of numbers (double). Vector size determines the number count and thus
dictates the "space" in which the vector is defined. We can imagine/
consider a vector vertically or horizontally in calculations and
processing. For example:
[pic]

When we print such vectors on screen, we adopt only the horizontal
String representation:

v1 = [0.1000, 2.9000, -5.5000, 8.7000, 3.0000]
v2 = [2.0000, 0.0000, -2.3000, 6.8000]

1. Finish the given Java class LAVector. In this class, all the fields are
protected while all the methods are public.

A. Declare a protected instance field n of type int, for keeping vector
size of an object.


B. Declare a protected instance field elements of type double array, for
keeping the numbers in a vector.

C. Define a public constructor which accepts a single parameter of type
int. You can decide the name of the parameter. The parameter
determines the vector size of a new object. The constructor should
store value of this parameter in the new object. The constructor should
also create a new array for the new object. Let all the elements in the
array be zero(es). The constructor needs NOT check/ validate the value
of the parameter, for example, negative or zero vector size.

D. Define an instance method getN() which simply returns the vector size.

E. Define a void-type instance method randomize() which fills the vector
with random numbers using Math.random(), i.e. pseudo random numbers in
the range of [0.0, 1.0).

F. Define a void-type instance method set(int i, double value) which stores
a value into ith element of the vector, where i must be in [0, n - 1].
No checking is needed.

G. Define a double-type instance method get(int i) which returns ith
element of the vector, where i must be in [0, n - 1]. No checking is
needed.

H. Define a double-type instance method dot(LAVector anotherVector) which
returns dot product of the vector with another vector. If the sizes of
the two vectors do not match, throw a new ArithmeticException, i.e. you
may copy these two lines:

if (n != anotherVector.n)
throw new ArithmeticException("dot product of vectors in different
space");
// after the throw statement, the method will terminate with an
exception;
// the normal method execution will be interrupted

If the vector sizes match, calculate and return the dot product.


I. Define a double-type instance method length() which returns length of
the vector, i.e. square root of (the vector dot the vector itself).


J. Define a String-type instance method toString() which converts/
represents the vector as a String, with numbers formatted in 4 decimal
places. You may copy these few lines:

@Override
public String toString()
{
String s = "[";


if (n > 0)
{
s += String.format("%.4f", elements[0]);
for (int i = 1; i < n; i++)
s += String.format(", %.4f", elements[i]);
}
return s + "]";
}

2. Test your Java class LAVector with our given class LinearAlgebra.
Alternatively, you may test with JUnit Tests.

Problem 4 (Create your own Internet Browser)

Aim: 1. Creating a simple Java GUI Application using NetBeans
2. Using JEditorPane and JTextField Swing Components

Procedure (step numbers correspond to circle numbers in the following
diagram):

1. In the Project Lab5_ExceptionHandlingAndBrowser, Create a new JFrame
Form called Browser.

2. You will see the Design View instead of the Source Code View.

3. Under the Design View/ Mode, you will see Palette with Swing Controls.
If not, click Menu Window ( Palette [Ctrl + Shift + 8].

4. In the Palette, click on Swing Controls ( Label. Then click (drop) on
the Design area.
The Label will be shown as "jLabel1". Let's change the text by right-
clicking on the label and then choosing Edit Text [F2]. Type "URL" or
"Address", as you like. Place it well.

5. In the Palette, click on Swing Controls ( Text Field. Then click (drop)
on the Design area.
Its name should be jTextField1. Resize it and place it next to the
label at the top.

6. In the Palette, click on Swing Controls ( Editor Pane. Then click
(drop) on the Design area.
Its name should be jEditorPane1. Resize it and place it at the bottom
of the window.

7. Resize and place the components as you wish. Those "snapping lines" are
very helpful.

[pic]

8. Double click on the JTextField object you dropped in step 6. You will
be brought to the Source Code View (see circle number 3.)

9. Type these under the system-generated method
jTextField1ActionPerformed():

private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt)
{
// TODO add your handling code here:
try {
URL link = new URL(jTextField1.getText());
jEditorPane1.setPage(link);
}
catch (Exception e) {
jEditorPane1.setText("Failed to load the page!");
}
}

Menu Source ( Fix Imports [Ctrl + Shift + I].

10. Your own browser is ready. Try these URL's (input link and press
in the Text Field):

http://www.cse.cuhk.edu.hk
http://www
http://www.google.com
ftp://ftp.cse.cuhk.edu.hk
ftp://ftp
http://a.b.c

11. Read the Java API documentation to see what methods JEditorPane
provides.

12. Extensions: add a "Go!" JButton under Design View; rename the
components; etc.

Summary:

We have practised creating a simple Java GUI Application using JFrame
Form. The JEditorPane class can create us a browser-like object. The
URL class can handle web-links, web-addresses, or alike, called
Uniform Resource Locator.

In this lab we have touched upon the exception mechanisms in Java. An
exception is generated when some "unexpected" errors had happened, and
a Java method can handle it (try-catch) or ignore it (declare throws).
In the last exercise, we handle the exceptions by displaying a text
in the JEditorPane, therefore the program will not "crash" when
exception occurs.

How to submit your work?

a) ZIP your WHOLE Lab5 NetBeans Project folder to Lab5.zip.
b) Login to https://cuforum.cuhk.edu.hk/forum_list.html?admin=2024 (CWEM
username and password)
c) Click on Homework tab ( Lab 5.
d) Browse and Submit a SINGLE ZIP file Lab5.zip.
e) Check your own submission before logout CUForum.


Marking Scheme and Notes:

1. The submitted programs should be free of any typing mistakes,
compilation errors/ warnings. Make sure part of your work can pass the
provided JUnit Tests as well as other appropriate tests.

2. Comment/remark, indentation, style are under assessment in every
programming assignments unless specified otherwise.

3. Do your submission before 18:00 p.m. of the due date. No la