diff --git a/.gitignore b/.gitignore
index d32f6f4..8fc55e4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -123,3 +123,5 @@
/Semester 2/Assignments/JavaFX_CalebFontenot/target/
/Semester 2/Assignments/JavaFX_CalebFontenot/nbproject/private/
/Semester 2/Assignments/JavaFX_CalebFontenot/build/
+/Semester 2/Exams/ProgrammingExam2_CalebFontenot/nbproject/private/
+/Semester 2/Exams/ProgrammingExam2_CalebFontenot/build/
diff --git a/Semester 2/Exams/ProgrammingExam2_CalebFontenot/build.xml b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/build.xml
new file mode 100644
index 0000000..615bcff
--- /dev/null
+++ b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/build.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+ Builds, tests, and runs the project ProgrammingExam2_CalebFontenot.
+
+
+
diff --git a/Semester 2/Exams/ProgrammingExam2_CalebFontenot/manifest.mf b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/manifest.mf
new file mode 100644
index 0000000..1574df4
--- /dev/null
+++ b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/manifest.mf
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+X-COMMENT: Main-Class will be added automatically by build
+
diff --git a/Semester 2/Exams/ProgrammingExam2_CalebFontenot/nbproject/build-impl.xml b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/nbproject/build-impl.xml
new file mode 100644
index 0000000..312aa37
--- /dev/null
+++ b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/nbproject/build-impl.xml
@@ -0,0 +1,1771 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must set src.dir
+ Must set test.src.dir
+ Must set build.dir
+ Must set dist.dir
+ Must set build.classes.dir
+ Must set dist.javadoc.dir
+ Must set build.test.classes.dir
+ Must set build.test.results.dir
+ Must set build.classes.excludes
+ Must set dist.jar
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must set javac.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No tests executed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must set JVM to use for profiling in profiler.info.jvm
+ Must set profiler agent JVM arguments in profiler.info.jvmargs.agent
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set javac.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ To run this application from the command line without Ant, try:
+
+ java -jar "${dist.jar.resolved}"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set debug.class
+
+
+
+
+ Must select one file in the IDE or set debug.class
+
+
+
+
+ Must set fix.includes
+
+
+
+
+
+
+
+
+
+ This target only works when run from inside the NetBeans IDE.
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set profile.class
+ This target only works when run from inside the NetBeans IDE.
+
+
+
+
+
+
+
+
+ This target only works when run from inside the NetBeans IDE.
+
+
+
+
+
+
+
+
+
+
+
+
+ This target only works when run from inside the NetBeans IDE.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+
+ Must select some files in the IDE or set test.includes
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set javac.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Some tests failed; see details above.
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set test.includes
+
+
+
+ Some tests failed; see details above.
+
+
+
+ Must select some files in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
+
+ Some tests failed; see details above.
+
+
+
+
+ Must select one file in the IDE or set test.class
+
+
+
+ Must select one file in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Semester 2/Exams/ProgrammingExam2_CalebFontenot/nbproject/genfiles.properties b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/nbproject/genfiles.properties
new file mode 100644
index 0000000..fce93c7
--- /dev/null
+++ b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/nbproject/genfiles.properties
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=3536f6ae
+build.xml.script.CRC32=80acc44d
+build.xml.stylesheet.CRC32=f85dc8f2@1.105.0.48
+# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
+# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
+nbproject/build-impl.xml.data.CRC32=3536f6ae
+nbproject/build-impl.xml.script.CRC32=22c114b3
+nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.105.0.48
diff --git a/Semester 2/Exams/ProgrammingExam2_CalebFontenot/nbproject/project.properties b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/nbproject/project.properties
new file mode 100644
index 0000000..98f8719
--- /dev/null
+++ b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/nbproject/project.properties
@@ -0,0 +1,86 @@
+annotation.processing.enabled=true
+annotation.processing.enabled.in.editor=false
+annotation.processing.processor.options=
+annotation.processing.processors.list=
+annotation.processing.run.all.processors=true
+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
+build.classes.dir=${build.dir}/classes
+build.classes.excludes=**/*.java,**/*.form
+# This directory is removed when the project is cleaned:
+build.dir=build
+build.generated.dir=${build.dir}/generated
+build.generated.sources.dir=${build.dir}/generated-sources
+# Only compile against the classpath explicitly listed here:
+build.sysclasspath=ignore
+build.test.classes.dir=${build.dir}/test/classes
+build.test.results.dir=${build.dir}/test/results
+# Uncomment to specify the preferred debugger connection transport:
+#debug.transport=dt_socket
+debug.classpath=\
+ ${run.classpath}
+debug.modulepath=\
+ ${run.modulepath}
+debug.test.classpath=\
+ ${run.test.classpath}
+debug.test.modulepath=\
+ ${run.test.modulepath}
+# Files in build.classes.dir which should be excluded from distribution jar
+dist.archive.excludes=
+# This directory is removed when the project is cleaned:
+dist.dir=dist
+dist.jar=${dist.dir}/ProgrammingExam2_CalebFontenot.jar
+dist.javadoc.dir=${dist.dir}/javadoc
+excludes=
+includes=**
+jar.compress=false
+javac.classpath=
+# Space-separated list of extra javac options
+javac.compilerargs=
+javac.deprecation=false
+javac.external.vm=true
+javac.modulepath=
+javac.processormodulepath=
+javac.processorpath=\
+ ${javac.classpath}
+javac.source=1.8
+javac.target=1.8
+javac.test.classpath=\
+ ${javac.classpath}:\
+ ${build.classes.dir}
+javac.test.modulepath=\
+ ${javac.modulepath}
+javac.test.processorpath=\
+ ${javac.test.classpath}
+javadoc.additionalparam=
+javadoc.author=false
+javadoc.encoding=${source.encoding}
+javadoc.noindex=false
+javadoc.nonavbar=false
+javadoc.notree=false
+javadoc.private=false
+javadoc.splitindex=true
+javadoc.use=true
+javadoc.version=false
+javadoc.windowtitle=
+main.class=programmingexam2_calebfontenot.ProgrammingExam2_CalebFontenot
+manifest.file=manifest.mf
+meta.inf.dir=${src.dir}/META-INF
+mkdist.disabled=false
+platform.active=default_platform
+run.classpath=\
+ ${javac.classpath}:\
+ ${build.classes.dir}
+# Space-separated list of JVM arguments used when running the project.
+# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
+# To set system properties for unit tests define test-sys-prop.name=value:
+run.jvmargs=
+run.modulepath=\
+ ${javac.modulepath}
+run.test.classpath=\
+ ${javac.test.classpath}:\
+ ${build.test.classes.dir}
+run.test.modulepath=\
+ ${javac.test.modulepath}
+source.encoding=UTF-8
+src.dir=src
+test.src.dir=test
diff --git a/Semester 2/Exams/ProgrammingExam2_CalebFontenot/nbproject/project.xml b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/nbproject/project.xml
new file mode 100644
index 0000000..6d7fbaf
--- /dev/null
+++ b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/nbproject/project.xml
@@ -0,0 +1,15 @@
+
+
+ org.netbeans.modules.java.j2seproject
+
+
+ ProgrammingExam2_CalebFontenot
+
+
+
+
+
+
+
+
+
diff --git a/Semester 2/Exams/ProgrammingExam2_CalebFontenot/src/problem2/Contact.java b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/src/problem2/Contact.java
new file mode 100644
index 0000000..3249bc1
--- /dev/null
+++ b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/src/problem2/Contact.java
@@ -0,0 +1,111 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package problem2;
+
+import java.util.Arrays;
+
+/**
+ *
+ * @author ar114
+ */
+public class Contact implements Comparable, Cloneable{
+
+ private String name;
+ private char[] address;
+ private String phone;
+
+ public Contact(String name, char[] address, String phone) {
+ this.name = name;
+ // Create a new address object.
+ this.address = Arrays.copyOf(address, address.length);
+ this.phone = phone;
+ }
+
+ public String getPhone() {
+ return phone;
+ }
+
+ public void setPhone(String phone) {
+ this.phone = phone;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public char[] getAddress() {
+
+ return address;
+ }
+
+ public void setAddress(char[] address) {
+ // Create a new address object.
+ this.address = Arrays.copyOf(address, address.length);
+ }
+
+ @Override
+ public String toString() {
+ return "Contract{" + "name=" + name + ", address=" + new String(address) + ", phone=" + phone + '}';
+ }
+
+ @Override
+ public int compareTo(Contact o) { // I know this isn't the correct way of obtaining these values, I'm unsure of the correct solution.
+ int difference = 0;
+ difference += this.name.compareTo(o.name);
+ difference += this.address.toString().compareTo(o.address.toString());
+ difference += this.phone.compareTo(o.phone);
+ return difference;
+ }
+ @Override
+ protected Object clone() {
+ // Create new objects.
+ String newName = new String(name);
+ char[] newAddress = Arrays.copyOf(address, address.length);
+ String newPhone = new String(phone);
+ return new Contact(newName, newAddress, newPhone);
+ }
+
+ public static void main(String[] args)
+ {
+ char[] address1 =
+ {
+ 'S', 'P', 'A', 'R', 'T', 'A'
+ };
+ Contact leonidas = new Contact("Leonidas King of Sparta", address1, "888-123-4577");
+ System.out.println(leonidas);
+ address1[0] = 'A';
+ address1[1] = 'T';
+ address1[2] = 'H';
+ address1[3] = 'E';
+ address1[4] = 'N';
+ address1[5] = 'S';
+ System.out.println(leonidas);
+ Object clonedLeonidas = leonidas.clone();
+ System.out.println(leonidas);
+ System.out.println(clonedLeonidas);
+
+ address1[0] = 'A';
+ address1[1] = 'R';
+ address1[2] = 'G';
+ address1[3] = 'O';
+ address1[4] = 'S';
+ address1[5] = ' ';
+
+ System.out.println(leonidas);
+ System.out.println(clonedLeonidas);
+
+ Contact pericles = new Contact("Pericles President of Athens", address1, "422-511-1232");
+
+ System.out.println("Pericles compareTo Pericles = " + pericles.compareTo(pericles));
+ System.out.println("Pericles compareTo Leonidas = " + pericles.compareTo(leonidas));
+ System.out.println("Cloned Leonidas compareTo Pericles = " + ((Contact) clonedLeonidas).compareTo(pericles));
+
+ }
+}
diff --git a/Semester 2/Exams/ProgrammingExam2_CalebFontenot/src/problem2/Main.java b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/src/problem2/Main.java
new file mode 100644
index 0000000..d14ce94
--- /dev/null
+++ b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/src/problem2/Main.java
@@ -0,0 +1,208 @@
+import java.util.Arrays;
+import javax.naming.SizeLimitExceededException;
+
+public class MyContacts implements Scramble
+{
+
+ private Contact[] contacts;
+ private int size;
+ public final static int CAPACITY = 2;
+
+ /**
+ * Adds a new contact.
+ *
+ * @param c the contact to be added
+ * @throws SizeLimitExceededException if we exceed the MyContacts.CAPACITY
+ */
+ public void add(Contact c) throws SizeLimitExceededException
+ {
+ if (this.size != CAPACITY) {
+ contacts[size] = c;
+ } else {
+ throw new SizeLimitExceededException("Capacity Exceeded!");
+ }
+ size++;
+ }
+
+ public MyContacts()
+ {
+ contacts = new Contact[CAPACITY];
+ }
+
+ @Override
+ public String toString()
+ {
+ String s = "";
+
+ for (int i = 0; i < this.size; ++i)
+ {
+ s += contacts[i].toString() + "\n";
+ }
+
+ return s;
+ }
+
+ /**
+ * Encrypts by adding the encyptionKey(String) parameter in the front of every
+ * property of every contact in the array .
+ *
+ * @param encyptionKey the object to be added as String to the front of
+ * every property of the Contact.
+ * @return the encrypted array as Object type
+ */
+ @Override
+ public Object encrypt(Object encyptionKey)
+ {
+ for (int i = 0; i < size; ++i)
+ {
+
+ contacts[i].setName(encyptionKey.toString() + contacts[i].getName());
+ contacts[i].setAddress((encyptionKey.toString() + new String(contacts[i].getAddress())).toCharArray()
+ );
+ contacts[i].setPhone(encyptionKey.toString() + contacts[i].getPhone());
+ }
+
+ return this;
+ }
+
+ /**
+ * Decrypts by removing the encyptionKey parameter from the front of every
+ * property of every contact in the array.
+ *
+ * @param decryptionKey the object(String) to be removed from the front of
+ * every property of the Contact in the array.
+ * @return the decrypted array as Object type
+ */
+ @Override
+ public Object decrypt(Object decryptionKey)
+ {
+ String name, address, phone;
+ String decrypt = ((String) decryptionKey);
+ for (int i = 0; i < size; ++i) {
+ // get
+ name = contacts[i].getName();
+ address = new String(contacts[i].getAddress());
+ phone = contacts[i].getPhone();
+ // decrypt
+ name = (name.split(decrypt))[1];
+ address = (address.split(decrypt))[1];
+ phone = (phone.split(decrypt))[1];
+ // set
+ contacts[i].setName(name);
+ contacts[i].setAddress(address.toCharArray());
+ contacts[i].setPhone(phone);
+ }
+
+ return this;
+ }
+
+ public static void main(String[] args)
+ {
+ MyContacts mc = new MyContacts();
+ char[] address1 =
+ {
+ 'S', 'P', 'A', 'R', 'T', 'A'
+ };
+ char[] address2 =
+ {
+ 'A', 'T', 'H', 'E', 'N', 'S'
+ };
+ try
+ {
+ mc.add(new Contact("Leonidas", address1, "888-123-4577"));
+ mc.add(new Contact("Pericles", address2, "422-511-1232"));
+ mc.add(new Contact("Athena", address2, "422-224-1151"));
+ }
+ catch (SizeLimitExceededException e)
+ {
+ System.err.println("%%%%%%% " + e);
+ }
+ System.out.println("Original Contacts\n" + mc);
+
+ mc.encrypt("abc");
+ System.out.println("Encrypted Contacts\n" + mc);
+
+ Object o = mc.decrypt("abc");
+ System.out.println("Decrypted Contacts Using the returned o\n" + o);
+ }
+}
+
+public interface Scramble
+{
+ /** Encrypts an object by using the parameter.
+ *
+ * @param key the key to use as encryption key
+ * @return the object encrypted
+ */
+ Object encrypt( Object key);
+
+
+ /** Decrypts an object by using the decryption key
+ *
+ * @param decryptionKey the key to use as decryption key
+ * @return the object decrypted
+ */
+ Object decrypt( Object key);
+}
+
+public class Contact implements Comparable, Cloneable{
+
+ private String name;
+ private char[] address;
+ private String phone;
+
+ public Contact(String name, char[] address, String phone) {
+ this.name = name;
+ // Create a new address object.
+ this.address = Arrays.copyOf(address, address.length);
+ this.phone = phone;
+ }
+
+ public String getPhone() {
+ return phone;
+ }
+
+ public void setPhone(String phone) {
+ this.phone = phone;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public char[] getAddress() {
+
+ return address;
+ }
+
+ public void setAddress(char[] address) {
+ // Create a new address object.
+ this.address = Arrays.copyOf(address, address.length);
+ }
+
+ @Override
+ public String toString() {
+ return "Contract{" + "name=" + name + ", address=" + new String(address) + ", phone=" + phone + '}';
+ }
+
+ @Override
+ public int compareTo(Contact o) { // I know this isn't the correct way of obtaining these values, I'm unsure of the correct solution.
+ int difference = 0;
+ difference += this.name.compareTo(o.name);
+ difference += this.address.toString().compareTo(o.address.toString());
+ difference += this.phone.compareTo(o.phone);
+ return difference;
+ }
+ @Override
+ protected Object clone() {
+ // Create new objects.
+ String newName = new String(name);
+ char[] newAddress = Arrays.copyOf(address, address.length);
+ String newPhone = new String(phone);
+ return new Contact(newName, newAddress, newPhone);
+ }
+}
diff --git a/Semester 2/Exams/ProgrammingExam2_CalebFontenot/src/problem2/MyContacts.java b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/src/problem2/MyContacts.java
new file mode 100644
index 0000000..c5ba536
--- /dev/null
+++ b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/src/problem2/MyContacts.java
@@ -0,0 +1,139 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package problem2;
+
+import java.util.Arrays;
+import javax.naming.SizeLimitExceededException;
+
+/**
+ *
+ * @author ar114
+ */
+public class MyContacts implements Scramble
+{
+
+ private Contact[] contacts;
+ private int size;
+ public final static int CAPACITY = 2;
+
+ /**
+ * Adds a new contact.
+ *
+ * @param c the contact to be added
+ * @throws SizeLimitExceededException if we exceed the MyContacts.CAPACITY
+ */
+ public void add(Contact c) throws SizeLimitExceededException
+ {
+ if (this.size != CAPACITY) {
+ contacts[size] = c;
+ } else {
+ throw new SizeLimitExceededException("Capacity Exceeded!");
+ }
+ size++;
+ }
+
+ public MyContacts()
+ {
+ contacts = new Contact[CAPACITY];
+ }
+
+ @Override
+ public String toString()
+ {
+ String s = "";
+
+ for (int i = 0; i < this.size; ++i)
+ {
+ s += contacts[i].toString() + "\n";
+ }
+
+ return s;
+ }
+
+ /**
+ * Encrypts by adding the encyptionKey(String) parameter in the front of every
+ * property of every contact in the array .
+ *
+ * @param encyptionKey the object to be added as String to the front of
+ * every property of the Contact.
+ * @return the encrypted array as Object type
+ */
+ @Override
+ public Object encrypt(Object encyptionKey)
+ {
+ for (int i = 0; i < size; ++i)
+ {
+
+ contacts[i].setName(encyptionKey.toString() + contacts[i].getName());
+ contacts[i].setAddress((encyptionKey.toString() + new String(contacts[i].getAddress())).toCharArray()
+ );
+ contacts[i].setPhone(encyptionKey.toString() + contacts[i].getPhone());
+ }
+
+ return this;
+ }
+
+ /**
+ * Decrypts by removing the encyptionKey parameter from the front of every
+ * property of every contact in the array.
+ *
+ * @param decryptionKey the object(String) to be removed from the front of
+ * every property of the Contact in the array.
+ * @return the decrypted array as Object type
+ */
+ @Override
+ public Object decrypt(Object decryptionKey)
+ {
+ String name, address, phone;
+ String decrypt = ((String) decryptionKey);
+ for (int i = 0; i < size; ++i) {
+ // get
+ name = contacts[i].getName();
+ address = new String(contacts[i].getAddress());
+ phone = contacts[i].getPhone();
+ // decrypt
+ name = (name.split(decrypt))[1];
+ address = (address.split(decrypt))[1];
+ phone = (phone.split(decrypt))[1];
+ // set
+ contacts[i].setName(name);
+ contacts[i].setAddress(address.toCharArray());
+ contacts[i].setPhone(phone);
+ }
+
+ return this;
+ }
+
+ public static void main(String[] args)
+ {
+ MyContacts mc = new MyContacts();
+ char[] address1 =
+ {
+ 'S', 'P', 'A', 'R', 'T', 'A'
+ };
+ char[] address2 =
+ {
+ 'A', 'T', 'H', 'E', 'N', 'S'
+ };
+ try
+ {
+ mc.add(new Contact("Leonidas", address1, "888-123-4577"));
+ mc.add(new Contact("Pericles", address2, "422-511-1232"));
+ mc.add(new Contact("Athena", address2, "422-224-1151"));
+ }
+ catch (SizeLimitExceededException e)
+ {
+ System.err.println("%%%%%%% " + e);
+ }
+ System.out.println("Original Contacts\n" + mc);
+
+ mc.encrypt("abc");
+ System.out.println("Encrypted Contacts\n" + mc);
+
+ Object o = mc.decrypt("abc");
+ System.out.println("Decrypted Contacts Using the returned o\n" + o);
+ }
+}
diff --git a/Semester 2/Exams/ProgrammingExam2_CalebFontenot/src/problem2/Scramble.java b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/src/problem2/Scramble.java
new file mode 100644
index 0000000..1293e81
--- /dev/null
+++ b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/src/problem2/Scramble.java
@@ -0,0 +1,29 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package problem2;
+
+/**
+ *
+ * @author ar114
+ */
+public interface Scramble
+{
+ /** Encrypts an object by using the parameter.
+ *
+ * @param key the key to use as encryption key
+ * @return the object encrypted
+ */
+ Object encrypt( Object key);
+
+
+ /** Decrypts an object by using the decryption key
+ *
+ * @param decryptionKey the key to use as decryption key
+ * @return the object decrypted
+ */
+ Object decrypt( Object key);
+}
+
diff --git a/Semester 2/Exams/ProgrammingExam2_CalebFontenot/src/programmingexam2_calebfontenot/ProgrammingExam2_CalebFontenot.java b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/src/programmingexam2_calebfontenot/ProgrammingExam2_CalebFontenot.java
new file mode 100644
index 0000000..0b273f1
--- /dev/null
+++ b/Semester 2/Exams/ProgrammingExam2_CalebFontenot/src/programmingexam2_calebfontenot/ProgrammingExam2_CalebFontenot.java
@@ -0,0 +1,22 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package programmingexam2_calebfontenot;
+
+/**
+ *
+ * @author ar114
+ */
+public class ProgrammingExam2_CalebFontenot {
+
+ /**
+ * @param args the command line arguments
+ */
+ public static void main(String[] args) {
+ Object[] objArr = new Object[100];
+ System.out.println(objArr[0]);
+ }
+
+}