/* * Part of exercises for lecture 2. * * NOTICE: If you set the field DEBUG to true, the class * will print a lot of helptext when running. */ public class RasmusVector{ private static final boolean DEBUG = false; private int size = 0; private int capacityIncrement = 2; private int initialSize = 3; private Object[] elements; private void debugPrint( String msg ){ if( DEBUG ){ System.out.println( "DEBUG: " + msg ); } } private void debugPrintMethod( String msg ){ if( DEBUG ){ System.out.println( "DEBUG: -------------------------" ); System.out.println( "DEBUG: " + msg + " was called" ); System.out.println( "DEBUG: -------------------------" ); } } RasmusVector(){ debugPrintMethod( "RasmusVector()" ); elements = new Object[ initialSize ]; } public int capacity(){ debugPrintMethod( "capacity()" ); debugPrint( "returns " + elements.length ); return elements.length; } public int size(){ debugPrintMethod( "size()" ); debugPrint( "returns " + size ); return size; } public void add( Object element ){ debugPrintMethod( "add(Object element)" ); debugPrint( "elements.length < (size+1) = "+elements.length+"<"+(size+1)+" = "+(elements.length<(size+1)) ); if( elements.length < (size+1) ){ Object[] newArray = new Object[ elements.length + capacityIncrement ]; debugPrint( "newArray created with the size " + (elements.length + capacityIncrement) ); for( int n = 0; n < elements.length; n++ ){ debugPrint( "sets newArray["+n+"] = elements["+n+"]" ); newArray[n] = elements[n]; } debugPrint( "sets elements = newArray" ); elements = newArray; } debugPrint( "sets elements["+size+"] = element" ); elements[size] = element; size = size +1; debugPrint( "sets size = size+1 (that is. size is now " + size + ")" ); } public Object get( int index ){ debugPrintMethod( "get(int index)" ); if( index < 0 ){ debugPrint( "index was negative (=" + index + "), so we return null" ); return null; } else if( index >= size ){ debugPrint( "index (=" + index + ") was not found (size=" + size + "), so we return null" ); return null; } else{ debugPrint( "We return the element at index " + index ); return elements[index]; } } public Object remove( int index ){ debugPrintMethod( "remove(int index)" ); if( index < 0 ){ debugPrint( "index was negative (=" + index + "), so we return null without removing anything" ); return null; } else if( index >= size ){ debugPrint( "index (=" + index + ") was not found (size=" + size + "), so we return null without removing anything" ); return null; } else{ debugPrint( "we same the element to be deleted in the variable removedObject" ); Object removedObject = elements[index]; for( int n = index; n < size-1; n++){ debugPrint( "we sets elements["+n+"] = elements["+(n+1)+"]" ); elements[n] = elements[n+1]; } size = size - 1; debugPrint( "We set size = size -1 (so now size is " + size + ")" ); if( elements.length > ( size + ( 2*capacityIncrement ) ) && elements.length > 2 * capacityIncrement ){ debugPrint( "elements is too big for the elements we store - so we shrink it" ); Object[] newArray = new Object[ elements.length - capacityIncrement ]; debugPrint( "newArray is made with the size " + newArray.length ); for( int n = 0; n < size; n++ ){ debugPrint( "sets newArray["+n+"] = elements["+n+"]" ); newArray[n] = elements[n]; } debugPrint( "sets elements = newArray" ); elements = newArray; } debugPrint( "we return the deleted object" ); return removedObject; } } public String toString(){ String s = "RasmusVector["; for( int n = 0; n < size(); n++ ){ s += get( n ).toString(); if( n != (size()-1) ) s+= ", "; } return s + "]"; } }