$29
The following interface represents a structure that can be split into two structures of type U, one containing the rst element, and the other containing the remaining elements (see Example 1 below):
// Se pa ra bl e st ru ct ur e
p u b l i c i n t e r f a c e Separable <U > {
• Return the length . i n t length () ;
• Return the first element . U first () ;
// Return all elements except the the first one .
U rest () ;
// C o n c a t e n a t e the two p a r a m e t e r s . The current object is not changed .
U concat ( U s1 , U s2 ) ;
}
1. Complete the class GArray below by implementing the methods of the interface Separable.
c l a s s GArray <T > implements Separable < GArray <T > > { p r i v a t e T [] data ;
• S u p p r e s s W a r n i n g s ( " u nc he ck ed " ) p u b l i c GArray ( i n t n ) {
data = ( T []) new Object [ n ];
}
// Return the element at position i p u b l i c T get ( i n t i ) {
return data [ i ];
}
// Set the element at position i p u b l i c void set ( i n t i , T e ) {
data [ i ] = e ;
}
• Ov er ri de
p u b l i c i n t length () {
return 0; // Change this
}
@ Ov er ri de
2
p u b l i c GArray <T > first () {
return n u l l ; // Change this
}
@ Ov er ri de
p u b l i c GArray <T > rest () {
return n u l l ; // Change this
}
@ Ov er ri de
p u b l i c GArray <T > concat ( GArray <T > s1 , GArray <T > s2 ) { return n u l l ; // Change this
}
}
2. Write the class Utils that implements the two following methods. You are free to use recursion.
p u b l i c c l a s s
Utils
{
//
Return
the
reverse of
s without changing s .
p u b l i c s t a t i c
<U
extends
Separable <U > > U reverse ( U
s ) {
return n u l l ;
}
//
Return
the
last part
of s without changing s.
p u b l i c s t a t i c
<U
extends
Separable <U > > U last ( U s )
{
return n u l l ;
}
}
Example 1. The class Main below shows an example of using GArray and Utils.
p u b l i c c l a s s
Main {
p u b l i c s t a t i c void
main ( String [] args ) {
GArray < Integer > a
= new GArray < Integer >(5) ;
a . set (0 ,
1) ;
a . set (1 ,
2) ;
a . set (2 ,
3) ;
a . set (3 ,
4) ;
a . set (4 ,
5) ;
print ( a . first () ) ; // prints : 1
print ( a . rest () ) ; // prints : 2 3 4 5
print ( a . concat ( a . rest () , a . first () ) ) ; // prints : 2 3 4 5 1
print ( Utils . reverse ( a ) ) ; // prints : 5 4 3 2 1
print ( Utils . last ( a ) ) ; // prints : 5
print ( a ) ; // prints : 1 2 3 4 5
}
p u b l i c s t a t i c <T > void print ( GArray <T > a ) {
f o r ( i n t i = 0; i < a . length () ; i ++) {
System . out . print (a. get (i) + " ");
}
System . out . println ();
}
}
• Deliverable and rules
You must deliver:
CSC 212 PA # 0
3
1. Source code submission to Web-CAT. You have to upload the following classes in a zipped le:
GArray Utils.
Notice that you should not upload:
The interface Separable. The class Main.
The submission deadline is:
You have to read and follow the following rules:
1. The speci cation given in the assignment (class and interface names, and method signatures) must not be modi ed. Any change to the speci cation results in compilation errors and consequently the mark zero.
2. All data structures used in this assignment must be implemented by the student. The use of Java collections or any other data structures library is strictly forbidden.
3. This is an individual assignment. Sharing code with other students will result in harsh penalties.
4. Posting the code of the assignment or a link to it on public servers, social platforms or any communication media including but not limited to Facebook, Twitter or WhatsApp will result in disciplinary measures against any involved parties.
5. The submitted software will be evaluated automatically using Web-Cat.
6. All submitted code will be automatically checked for similarity, and if plagiarism is con-rmed penalties will apply.
7. You may be selected for discussing your code with an examiner at the discretion of the teaching team. If the examiner concludes plagiarism has taken place, penalties will apply.
CSC 212 PA # 0