Quantcast
Channel: Programming Forums
Viewing all articles
Browse latest Browse all 51036

ArrayOperations class on primitive-type-static arrays

$
0
0
Hi I wrote a class that carries out operations on integer-type-static-arrays. However, I'd like to extend the functionalities in this class to other primitive-type-static-arrays, but I don't know a short way to do this without having to create new classes for each primitive type.

Please let me know if this is possible; and how do I go about it?

Here's the code for the class:


import acm.util.ErrorException;

/**
 * @author ac3Takwas
 * 
 * This class defines a number of operations that can be
 * carried out on static array integer types.
 * Most of these operations are similar to the ones
 * in the java.util.ArrayList class
 *
 * Have Fun Using them!
 */
 class ArrayOperation {

	private static final int NOT_FOUND = -1;

	
	
	/**
	 * gets a sub-array of the specified array that contains
	 * elements between the specified index and the end of the array 
	 * 
	 * @param arr the big array from which a new array is to be formed
	 * @param startIndex the index at which to start the selection
	 * @return the new sub-array; null if the specified index is invalid
	 */
	public static int[] subStartArray(int[] arr, int startIndex){
		return subArray(arr, startIndex, arr.length);
	}
	

	/**
	 * gets a sub-array of the specified array that contains
	 * elements between the beginning of the array and the specified index  
	 * 
	 * @param arr the big array from which a new array is to be formed
	 * @param endIndex the index at which to end the selection
	 * @return the new sub-array; null if the specified index is invalid
	 */
	public static int[] subEndArray(int[] arr, int endIndex){
		return subArray(arr, 0, endIndex);
	}
	
	/**
	 * Gets a sub-array of the passed array between the specified indices;
	 * exclusive of the value at the endIndex
	 * 
	 * @param arr the passed array (parent array) from which the sub-array is to be derived
	 * @param index the index of the parent array from which to start
	 * @param endIndex the index to stop; the value located at this index is not included in the returned sub-array 
	 * @return the derived sub-array if found; null if any of the specified indexes is invalid
	 */
	public static int[] subArray(int[] arr, int index, int endIndex){
		if(index<0 || index>arr.length || endIndex<0 || endIndex>arr.length)
			return null;
	
		else{
			int[] temp = new int[(endIndex-index)];
			
			for(int i=0; i<temp.length; i++){
				temp[i] = arr[index++];
			}
	
			return temp;
		}
	}
	
	/**
	 * Gets the index position of the first occurrence of the specified value in the specified array
	 * 
	 * @param arr the array from which to find the value
	 * @param value the value to search for
	 * @return the index of the value if found; -1 if the value is not contained within the array
	 */
	public static int indexOf(int[] arr, int value){
		
		for(int i=0; i<arr.length; i++){
			if(arr[i] == value)
				return i;
		}
		
		return NOT_FOUND;
	}
	
	/**
	 * Gets the index position of the last occurrence of the specified value in the specified array
	 * 
	 * @param arr the array from which to find the value
	 * @param value the value to search for
	 * @return the index of the value if found; -1 if the value is not contained within the array
	 */
	public static int lastIndexOf(int[] arr, int value){
		
		for(int i=arr.length-1; i>=0; i--){
			if(arr[i] == value)
				return i;
		}
		
		return NOT_FOUND;
	}
	
	/**
	 * Finds out if the specified array contains the specified
	 * 
	 * @param arr the array from which to search
	 * @param value the value to search for
	 * @return true if the array contains the value; false if the value is not contained within the array
	 */
	public static boolean contains(int[] arr, int value){

		for(int i=0; i<arr.length; i++){
			if(arr[i] == value)
				return true;
		}
		
		return false;
	}
	
	/**
	 * adds the specified value to the specified array thereby expanding the array to allow it hold this new value
	 * 
	 * @param arr the array to which to add a value
	 * @param value the value to add to the array
	 * @return a new array that has the specified value as one of it's contents
	 */
	public static int[] add(int[] arr, int value){
		
		int[] temp = {value};	
		
		return combineArrays(arr, temp);
	}
	
	
	/**
	 * adds the specified value to the specified array in the specified index
	 * 
	 * @param arr the array to add the a new value to
	 * @param value the value to add to the array
	 * @param index the index to which to add the new value
	 * @return a new array that has the specified value as one of it's contents and located at the specified array
	 * @throws ErrorException if the specified index position is wrong
	 */
	public static int[] addToIndex(int[] arr, int value, int index)throws ErrorException{
		if(index<0 || index>arr.length ){
			System.out.print("\nThat's an invalid index");
			throw new ErrorException("That's an invalid index");
			
		}
		
		int[] tempBeg = add(subEndArray(arr, index), value);
		int[] tempEnd = subStartArray(arr, index);
		
		int[] temp = combineArrays(tempBeg, tempEnd);
		
		return temp;
	}
	
	/**
	 * Removes the first occurrence of the specified value from the specified array
	 * 
	 * @param arr the array from which to remove the value
	 * @param value the value to remove
	 * @return a new (reduced) array
	 */
	public static int[] removeFirstOccurrence(int[] arr, int value){
		int[] tempBeg = subEndArray(arr, indexOf(arr, value));
		int[] tempEnd = subStartArray(arr, indexOf(arr, value)+1);
		
		return combineArrays(tempBeg, tempEnd);
	}
	
	/**
	 * Removes all occurrence of the specified value from the specified array
	 * 
	 * @param arr the array from which to remove the value
	 * @param value the value to remove
	 * @return a new (reduced) array that no longer has any occurrence of the specified value
	 */
	public static int[] removeAllOccurrence(int[] arr, int value){
		
		while( indexOf(arr, value) != NOT_FOUND){
			arr = removeFirstOccurrence(arr, value);
		}
		
		return arr;
	}
	
	
	/**
	 * Combines two arrays to form a new array
	 * 
	 * @param arr1 the first array
	 * @param arr2 the second array
	 * @return a new array that contains all values from both the first and second arrays 
	 */
	public static int[] combineArrays(int[] arr1, int[] arr2){
		
		if(arr1 == null)
			return arr2;
		else if (arr2 == null) {
			return arr1;
		}
		
		else{
			
			int[] temp = new int[arr1.length + arr2.length];
			
			int tempArrTracker = 0;
			
			for(int i=0; i<arr1.length; i++){
				temp[tempArrTracker++] =  arr1[i];
			}
			
			for(int i=0; i<arr2.length; i++){
				temp[tempArrTracker++] =  arr2[i];
			}
			
			return temp;
		}
	}
	
	/**
	 * Replaces all occurrences of the specified value in the specified
	 * array with a new specified value 
	 * 
	 * @param arr the array on which to carry out the operation
	 * @param value the value to be replaced
	 * @param replacer the new value with which to replace the old value
	 * @return a new edited array 
	 */
	public static int[] replaceAllOccurrence(int[] arr, int value, int replacer){
		
		for(int i=0; i<arr.length; i++){
			if(arr[i] == value)
				arr[i] = replacer;	
		}
		
		return arr;
	}
	
	
	/**
	 * Sorts the specified array in an ascending order
	 * 
	 * @param arr the array to be sorted
	 * @return a new sorted array
	 */
	public static int[] sortAscending(int[] arr){
		
		return reverse(sortDescending(arr));
	}
	
	/**
	 * Re-arranges the specified array by reversing it
	 * 
	 * @param arr the array to be reversed
	 * @return a new reversed array
	 */
	public static int[] reverse(int[] arr){
		int[] temp = new int[arr.length];

		for(int i= arr.length-1, j=0; i>=0; i--, j++){
			temp[j] = arr[i];
		}
		
		return temp;
	}
	
	/**
	 * Sorts the specified array in an descending order
	 * 
	 * @param arr the array to be sorted
	 * @return a new sorted array
	 */
	public static int[] sortDescending(int[] arr){
		
		for (int leftSide= 0; leftSide<arr.length; leftSide++){
			
			int[] temp = subStartArray(arr, leftSide);
			int currentMax = getMax(temp);
			
			if(arr[leftSide] < currentMax){
				arr = swap(arr, leftSide, leftSide+indexOf(temp, currentMax));
			}
		}
		
		return arr;
	}
	
	private static int getMax(int[] arr) {
		int max = 0;
		
		for(int i=0; i<arr.length; i++){
			max = Math.max(max, arr[i]);
		}
		
		return max;
	}

	/**
	 * Swaps the values in the specified indexes
	 * 
	 * @param arr the array on which to carry out the operation 
	 * @param index1
	 * @param index2
	 * @return
	 */
	public static int[] swap(int[] arr, int index1, int index2){
		int temp = arr[index1];
		arr[index1] = arr[index2];;
		arr[index2] = temp;
		
		return arr;
	}
	
}




Viewing all articles
Browse latest Browse all 51036

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>