Tut04 - james-bern/CS136 GitHub Wiki

NOTE: If you finish early, implement remove(int index) and add more test code 🙂👍 You can also implement bubbleSort() and quickSort().

import java.util.Arrays;
class Tut04 extends Cow { 

	static class XArrayList {
		int length;
		String[] internalArray;

		XArrayList() { // constructor
			this.length = 0;
			this.internalArray = new String[2];
		}

		void add(String element) {
			// TODO
		}

		void add(int index, String element) {
			// TODO
		}

		// This function is called when we print.
		public String toString() {
			String result = "";
			result += "[";
			for (int i = 0; i < this.length; ++i) {
				result += this.internalArray[i];
				if (i != (this.length - 1)) result += ", ";
			}
			result += "]";
			result += " // ";
			result += Arrays.toString(this.internalArray);
			return result;
		}
	}

	public static void main(String[] arguments) {
		XArrayList list = new XArrayList();
		PRINT(list); // [] // [null, null]

		list.add("Hello");
		PRINT(list); // [Hello] // [Hello, null]

		list.add("Cruel");
		PRINT(list); // [Hello, Cruel] // [Hello, Cruel]

		list.add("World");
		PRINT(list); // [Hello, Cruel, World] // [Hello, Cruel, World, null]

		list.add(1, "Mister");
		PRINT(list); // [Hello, Mister, Cruel, World] // [Hello, Mister, Cruel, World]

		list.add(0, "Oh");
		PRINT(list); // [Oh, Hello, Mister, Cruel, World] // [Oh, Hello, Mister, Cruel, World, null, null, null]
	}
}

Solution

👀
import java.util.Arrays;
class Tut04 extends Cow { 

	static class XArrayList {
		int length;
		String[] internalArray;

		XArrayList() {
			this.length = 0;
			this.internalArray = new String[2];
		}

		void add(String element) { // append (push back) element
			add(this.length, element);
		}

		void add(int index, String element) { // insert element so it has index index
			ASSERT(index >= 0);
			ASSERT(index <= this.length);
			
			// if full, double size of internalArray
			boolean isFull = (this.length == this.internalArray.length);
			if (isFull) {
				String[] tmp = new String[2 * this.length];
				for (int i = 0; i < this.length; ++i) {
					tmp[i] = this.internalArray[i];
				}
				this.internalArray = tmp;
			}
			
			// move stuff over to make room
			// NOTE: make sure to iterate backwards to avoid the brocolli problem
			for (int i = (this.length - 1); i >= index; --i) {
				this.internalArray[i + 1] = this.internalArray[i];
			}
			
			// write new element
			this.internalArray[index] = element;
			this.length++;
			
		}

		// This function is called when we print.
		public String toString() {
			String result = "";
			result += "[";
			for (int i = 0; i < this.length; ++i) {
				result += this.internalArray[i];
				if (i != (this.length - 1)) result += ", ";
			}
			result += "]";
			result += " // ";
			result += Arrays.toString(this.internalArray);
			return result;
		}
	}

	public static void main(String[] arguments) {
		XArrayList list = new XArrayList();
		PRINT(list); // [] // [null, null]

		list.add("Hello");
		PRINT(list); // [Hello] // [Hello, null]

		list.add("Cruel");
		PRINT(list); // [Hello, Cruel] // [Hello, Cruel]

		list.add("World");
		PRINT(list); // [Hello, Cruel, World] // [Hello, Cruel, World, null]

		list.add(1, "Mister");
		PRINT(list); // [Hello, Mister, Cruel, World] // [Hello, Mister, Cruel, World]

		list.add(0, "Oh");
		PRINT(list); // [Oh, Hello, Mister, Cruel, World] // [Oh, Hello, Mister, Cruel, World, null, null, null]
	}
}
⚠️ **GitHub.com Fallback** ⚠️