In: Computer Science
/**
* This class maintains an arbitrary length list of integers.
*
* In this version:
* 1. The size of the list is *VARIABLE* after the object is
created.
* 2. The code assumes there is at least one element in the
list.
*
* This class introduces the use of structural recursion.
*
* @author Raymond Lister
* @version May 2016
*
*/
public class ListOfNVersion03PartB
{
private int thisNumber; // the number stored in this node
private ListOfNVersion03PartB next; // forms a linked list of
objects
private final int nodeID; // a unique ID for each object in the
list
private static int nodeCount = 0; // the number of list objects
that have been created
/**
* This constructor initializes the list to the same values
* as in the parameter.
*
* @param element the initial elements for the list
*/
public ListOfNVersion03PartB(int num)
{
thisNumber = num;
next = null;
++nodeCount;
nodeID = nodeCount;
} // constructor(int num)
/**
* @param num the multiple values to be stored in the list, in that
order
*/
public ListOfNVersion03PartB(int [] num)
{
this(num[0]); // in this context, "this" invokes the other
constructor
for (int i=1 ; i<num.length ; ++i)
insertLast(num[i]);
} // constructor(int [] num)
/**
* @return the first element in the list
*/
public int getFirst()
{
return thisNumber;
} // method getFirst
/**
* prints this object
*/
public void printNode()
{
System.out.print("[" + nodeID + "," + thisNumber + "]->");
} // method printListNode
/**
* stringifies this object
*/
public String toStringNode()
{
return "[" + nodeID + "," + thisNumber + "]->";
} // method toStringNode
/**
* form a string from the tail of a list
*/
private String toStringTail()
{
String s = toStringNode();
if ( next != null )
s = s + next.toStringTail();
return s;
} // method toStringTail
/**
* @return A summary of the contents of the whole list.
*/
public String toString()
{
String s = toStringNode();
if ( next != null )
s = s + next.toStringTail();
return s;
} // method toString
/**
* @return the sum of the elements of the array
*/
public int sum()
{
if( next == null )
return thisNumber;
else
return thisNumber + next.sum();
} // method sum
/**
* @return the number of times the replacement was made (i.e. 0 or
1)
*
* @param replaceThis the element to be replaced
* @param withThis the replacement
*/
public int replaceOnce(int replaceThis, int withThis)
{
return 999;
} // method replaceOnce
/**
* @return the value of the smallest element in the list
*/
public int minVal()
{
return 999;
} // method minVal
/**
* Inserts an element in the first position. The elements already in
the
* list are pushed up one place.
*
* @param newElement the element to be inserted
*/
public void insertFirst(int newElement)
{
ListOfNVersion03PartB temp = new
ListOfNVersion03PartB(thisNumber);
temp.next = next;
next = temp;
thisNumber = newElement;
} // method insertFirst
/**
* Inserts an element in the last position. The pre-existing
elements in the
* list are unaffected.
*
* @param newElement the element to be inserted
*/
public void insertLast(int newElement)
{
// add and/or modify code to complete the method
if ( next == null )
next = new ListOfNVersion03PartB(newElement);
else
next.insertLast(newElement);
} // method insertLast
/**
* No change if there is only one element in the list. Otherwise, it
moves up one place all
* elements in the list, by overwriting each "thisNumber" with
"next.thisNumber", thus
* removing the first value in the list. The last node in the list
is removed.
*/
public void shuffleUp()
{
System.out.println("This method is NOT part of the lab
test");
System.out.println("It will probably be part of the
assignment");
} // method shuffleUp
/*
* @return the number of deletions made (i.e. 0 or 1)
*
* @param element the element to be deleted
* @param predecessor a reference to the previous node in the linked
list
* i.e. the node where "next" points to this node
*/
private int delete2(int element, ListOfNVersion03PartB
predecessor)
{
System.out.println("This method is NOT part of the lab
test");
System.out.println("It will probbaly be part of the
assignment");
return 99; // delete this line and complete the method for the
assignment
} // method delete2
/**
* @return the number of deletions made (i.e. 0 or 1)
*
* @param element the element to be deleted
*/
public int delete(int element)
{
if ( (thisNumber == element) && (next == null) )
{
System.out.println("Error when attempting to delete '" + element +
"'. The list must contain at least one element");
return 0;
}
if ( thisNumber == element )
{
// if thisNumber == element is true then the first "if" statement
implies that next != null
thisNumber = next.thisNumber;
next = next.next;
return 1;
}
if ( next == null )
{
// if next == null is true then the first "if" statement implies
that thisNumber != element
return 0;
}
return next.delete2(element, this);
} // method delete
public static void main(String[] args)
{
int [] a = {3,7,1,7};
ListOfNVersion03PartB list = new ListOfNVersion03PartB(a);
System.out.println(list.toString());
int n = list.getFirst();
System.out.println("First element is: " + n);
System.out.println(list.toString());
int m = list.sum();
System.out.println("The sum of the values is: " + m);
int ro1 = list.replaceOnce(2,3);
System.out.println("Number of replacements of value 2 with 1 is: "
+ ro1);
System.out.println(list.toString());
int ro2 = list.replaceOnce(3,4);
System.out.println("Number of replacements of value 3 with 4 is: "
+ ro2);
System.out.println(list.toString());
int ro3 = list.replaceOnce(7,8);
System.out.println("Number of replacements of value 7 with 8 is: "
+ ro3);
System.out.println(list.toString());
int mv = list.minVal();
System.out.println("Minimum value is: " + mv);
int ro4 = list.replaceOnce(1,7);
System.out.println("Number of replacements of value 3 with 4 is: "
+ ro4);
System.out.println(list.toString());
int ro5 = list.replaceOnce(8,1);
System.out.println("Number of replacements of value 3 with 4 is: "
+ ro5);
System.out.println(list.toString());
list.insertFirst(2);
System.out.println(list.toString());
}
} // class ListOfNVersion03PartA
package Array;
/**
* This class maintains an arbitrary length list of integers.
*
* In this version:
* 1. The size of the list is fixed after the object is
created.
* 2. The code assumes there is at least one element in the
list.
*
* This class introduces the use of loops.
*
* @author Raymond Lister
* @version September 2015
*
*/
public class ListOfNVersion02PartA
{
public int[] list; // Note: no "= {0, 1, 2, 3}"
now
/**
* This constructor initializes the list to the same
values
* as in the parameter.
*
* @param element the initial elements for the
list
*/
public ListOfNVersion02PartA(int [] element)
{
// make "list" be an array the same
size as "element"
list = new
int[element.length];
// Loops till length of the
parameter array
for(int c = 0; c <
element.length; c++)
// Assigns each
element of parameter element array to
// implicit
array
list[c] =
element[c];
} // constructor ListOfNVersion01Skeleton(int []
element)
/**
* @return the number of elements stored in this
list
*/
public int getListSize()
{
return list.length;
} // method getListSize
/**
* @return the last element in the list
*/
public int getLast()
{
return list[list.length-1];
} // method getLast
/**
* prints the contents of the list, in order from first
to last
*/
public void printList()
{
System.out.print("{");
// Loops till number of elements in
the list
for(int c = 0; c < list.length;
c++)
if(c ==
list.length-1)
// Displays current index position value
System.out.print(list[c]);
else
System.out.print(list[c] + ", ");
System.out.print("}");
} // method printList
/**
* This method is NOT examinable in this test.
*
* prints the contents of the list, in order from first
to last, and
* then moves the cursor to the next line
*/
public void printlnList()
{
printList();
System.out.println();
} // method printlnList
/**
* @return the number of times the element occurs in
the list
*
* @param element the element to be counted
*/
public int countElement(int element)
{
// Counter for number of times
found
int count = 0;
// Loops till number of elements in
the list
for(int c = 0; c < list.length;
c++)
// Checks if
parameter element is equals to list current current index position
value
if(element ==
list[c])
// Increase the counter by one
count++;
// Returns the counter
return count;
} // method countElement
/**
* @return the number of times the replacement was
made
*
* @param replaceThis the element to be replaced
* @param withThis the replacement
*/
public int replaceAll(int replaceThis, int
withThis)
{
// Counter for number of
replacement
int countReplacement = 0;
// Loops till number of elements in
the list
for(int c = 0; c < list.length;
c++)
{
// Checks if
list current current index position value is equals to
// parameter
replaceThis value
if(list[c] ==
replaceThis)
{
// Assigns the parameter withThis value
// at fond index position c
list[c] = withThis;
// Increase the counter by one
countReplacement++;
}
}
// Returns the counter
return countReplacement;
} // method replaceAll
/**
* @return the first position in list occupied by the
parameter value, or -1 if it is not found
*
* @param findThis the value to be found
*/
public int findUnSorted(int findThis)
{
// Loops till number of elements in
the list
for(int c = 0; c < list.length;
c++)
// Checks if
list current current index position value is equals to
// parameter
findThis value
if(list[c] ==
findThis)
// Returns the loops variable value as found
index position
return c;
// At the end of the for loop
returns -1 for not found
return -1;
// add and/or modify code to
complete the method
} // method findUnSorted
/**
* @return the position of the smallest element in the
array, between positions "first" and "last"
*/
public int minPos()
{
// Initially smallest element
position is considered as 0
int minPos = 0;
// Initially smallest value is
considered as 0th index position value
int minValue = list[0];
// Loops from 1 index position to
number of elements in the list
// Starts from 1 because 0th index
position is already considered as
// minimum
for(int c = 1; c < list.length;
c++)
// Checks if
list current index position value is less than
// the earlier
minimum value
if(list[c] <
minValue)
{
// Update the minimum position by assigning loop
variable value
minPos = c;
// Assigns the current index position value as
the minimum
minValue = list[c];
}
return minPos;
} // method minPos
/**
* Inserts an element in the last position. The
elements already in the
* list are pushed down one place, and the element that
was previously
* first is lost from the list.
*
* @param newElement the element to be inserted
*/
public void insertLast(int newElement)
{
// Loops till number of elements in
the list
for(int c = 0; c <
list.length-1; c++)
list[c] = list[c
+ 1];
list[list.length-1] =
newElement;
} // method insertLast
public static void main(String []s)
{
// Creates an array
int [] element = {0, 1, 2,
3};
// Creates an object of class
ListOfNVersion02PartA
// using parameterized constructor
by passing array element
ListOfNVersion02PartA li = new
ListOfNVersion02PartA(element);
// Calls the method to test
System.out.println("\n ************
List Contents ************ ");
li.printlnList();
System.out.print("\n List Size: " +
li.getListSize());
System.out.print("\n List Last
Element: " + li.getLast());
System.out.print("\n Number of 2's
in List: " + li.countElement(2));
System.out.print("\n Replace 2 with
22");
li.replaceAll(2, 22);
System.out.println("\n ************
List Contents ************ ");
li.printlnList();
System.out.print("\n Insert 22 at
the end.");
li.insertLast(22);
System.out.println("\n ************
List Contents ************ ");
li.printlnList();
System.out.print("\n Number of 22
in List: " + li.countElement(22));
}// end of main method
} // class ListOfNVersion02PartA
Sample Output:
************ List Contents ************
{0, 1, 2, 3}
List Size: 4
List Last Element: 3
Number of 2's in List: 1
Replace 2 with 22
************ List Contents ************
{0, 1, 22, 3}
Insert 22 at the end.
************ List Contents ************
{1, 22, 3, 22}
Number of 22 in List: 2