diff --git a/src/main/java/io/zipcoder/Classroom.java b/src/main/java/io/zipcoder/Classroom.java index 64566f0..b0d1044 100644 --- a/src/main/java/io/zipcoder/Classroom.java +++ b/src/main/java/io/zipcoder/Classroom.java @@ -1,4 +1,95 @@ package io.zipcoder; +import java.lang.reflect.Array; +import java.util.*; + public class Classroom { + + private Student[] student; + + public Classroom(Integer maxNumberOfStudents) { + this.student = new Student[maxNumberOfStudents]; + } + + public Classroom(Student[] newStudentArray) { + this.student = new Student[newStudentArray.length]; + for (int i = 0; i < newStudentArray.length; i++) { + student[i] = newStudentArray[i]; + } + } + + public Classroom() { + this.student = new Student[30]; + } + + public Student[] getStudents() { + return student; + } + + public Double getAverageExamScore() { + Double result = 0.0; + for (Student element : student) { + result += element.getAverageExamScore(); + } + return result / student.length; + } + + public void addStudent(Student student) { + ArrayList addStudentArray = new ArrayList<>(Arrays.asList(this.student)); // might be the issue - it creates a list from + addStudentArray.add(student); // the parameter 'Student student' instead of the class + this.student = addStudentArray.toArray(new Student[0]); // same concept as removing a student + } + + public void removeStudent (String firstName, String lastName) { + ArrayList removeStudentArray = new ArrayList<>(Arrays.asList(student)); + for (Student element : removeStudentArray) { + String actualFirstName = element.getFirstName(); + String actualLastName = element.getLastName(); + if (actualFirstName == firstName && actualLastName == lastName) { + removeStudentArray.remove(element); + } + } + this.student = removeStudentArray.toArray(new Student[0]); + } + + public Student[] getStudentsByScore() { + // ArrayList sortStudentArray = new ArrayList<>(Arrays.asList(student)); + // for (Student element : sortStudentArray) { + // element.getFirstName(); + // sortStudentArray.sort(Comparator.comparingDouble(student -> element.getAverageExamScore()).thenComparing(student -> element.getFirstName())); + // } + // Arrays.sort(student); + List students = Arrays.asList(this.getStudents()); + Comparator byScore = Comparator.comparing(Student::getAverageExamScore); + Comparator byFirstName = Comparator.comparing(Student::getFirstName); + + Collections.sort(students, byScore.thenComparing(byFirstName)); + return students.toArray(new Student[0]); + } + + public Student[] getGradeBook() { + Arrays.sort(student); + ArrayList addingTheGrade = new ArrayList<>(Arrays.asList(student)); + + Double result = 0.0; + Double standardDevi; + for (Student eachStudent : addingTheGrade) { + result += Math.pow(eachStudent.getAverageExamScore() - getAverageExamScore(), 2); + standardDevi = Math.sqrt(result/(student.length - 1)); + if (eachStudent.getAverageExamScore() >= (getAverageExamScore() + (standardDevi * 2))) { + eachStudent.setLetterGrade("A"); + } else if (eachStudent.getAverageExamScore() >= (getAverageExamScore() + (standardDevi))) { + eachStudent.setLetterGrade("B"); + } else if (eachStudent.getAverageExamScore() >= getAverageExamScore()) { + eachStudent.setLetterGrade("C"); + } else if (eachStudent.getAverageExamScore() >= (getAverageExamScore() - (standardDevi))) { + eachStudent.setLetterGrade("D"); + } else { + eachStudent.setLetterGrade("F"); + } + } + System.out.println(addingTheGrade); + return addingTheGrade.toArray(new Student[0]); + } } + diff --git a/src/main/java/io/zipcoder/Student.java b/src/main/java/io/zipcoder/Student.java index b543e36..f40c1c7 100644 --- a/src/main/java/io/zipcoder/Student.java +++ b/src/main/java/io/zipcoder/Student.java @@ -1,4 +1,89 @@ package io.zipcoder; -public class Student { +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; + +public class Student implements Comparable { + + String firstName; // collection of characters representative of a first name + String lastName; // collection of characters representative of a last name + ArrayList examScores; // dynamic collection of decimal values representative of test scores + String letterGrade; + + public String getLetterGrade() { + return letterGrade; + } + + public void setLetterGrade(String letterGrade) { + this.letterGrade = letterGrade; + } + + public Student(String letterGrade, String firstName, String lastName, Double[] examScores) { + this.letterGrade = letterGrade; + this.firstName = firstName; + this.lastName = lastName; + this.examScores = new ArrayList<>(Arrays.asList(examScores)); + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public Integer getNumberOfExamsTaken() { + return this.examScores.size(); + } + + public String getExamScores() { + int index = 1; + String result = "Exam Scores:\n"; + for (Double score: examScores) { + result += "Exam " + index + " -> " +score + "\n"; + index++; + } + result += "Letter Grade: " + letterGrade; + return result; + } + + public void addExamScore(Double examScore) { + this.examScores.add(examScore); + } + + public void setExamScore(int examNumber, Double newScore) { + this.examScores.set(examNumber, newScore); + } + + public Double getAverageExamScore() { + Double summation = 0.0; + for (int i = 0; i < this.examScores.size(); i++) { + summation += this.examScores.get(i); + } + return summation / this.examScores.size(); + } + + public String toString() { // This is some dumb shit - sat here for hours because i forgot to include 'this.letterGrade + " " + ' + return this.letterGrade + " " + this.firstName + " " + this.lastName + ", " + this.examScores; + } + + @Override + public int compareTo(Student smallStudent) { + if (this.getAverageExamScore() == smallStudent.getAverageExamScore()) { + return this.getFirstName().compareToIgnoreCase(smallStudent.getFirstName()); + // This compares the scores, haven't been able to + } // compare lexicographically + // return (int) (this.getAverageExamScore() - smallStudent.getAverageExamScore()); + return (int) (smallStudent.getAverageExamScore() - this.getAverageExamScore()); + } } diff --git a/src/test/java/io/zipcoder/ClassroomTest.java b/src/test/java/io/zipcoder/ClassroomTest.java index 7bac1ff..bb262d9 100644 --- a/src/test/java/io/zipcoder/ClassroomTest.java +++ b/src/test/java/io/zipcoder/ClassroomTest.java @@ -1,4 +1,146 @@ package io.zipcoder; +import org.junit.Assert; +import org.junit.Test; + +import java.util.Arrays; + public class ClassroomTest { + + @Test + public void getStudentsTest () { + // : Given + Double[] s1Scores = { 100.0, 150.0 }; + Double[] s2Scores = { 225.0, 25.0 }; + + Student s1 = new Student("", "student", "one", s1Scores); + Student s2 = new Student("", "student", "two", s2Scores); + + Student[] students = {s1,s2}; + Classroom classroom = new Classroom(students); + + // When + String output = String.valueOf(classroom.getStudents()); + + // Then + System.out.println(output); + } + + @Test + public void getAverageExamScoreTest () { // needs some work + Double[] s1Scores = { 100.0, 150.0 }; + Double[] s2Scores = { 275.0, 25.0 }; + + Student s1 = new Student("", "student", "one", s1Scores); + Student s2 = new Student("", "student", "two", s2Scores); + + Student[] student = {s1,s2}; + Classroom classroom = new Classroom(student); + + // When + double output = classroom.getAverageExamScore(); + + // Then + System.out.println(output); + } + + @Test + public void addStudentTest () { + // : Given + int maxNumberOfStudents = 1; + Classroom classroom = new Classroom(maxNumberOfStudents); + Double[] examScores = { 100.0, 150.0, 250.0, 0.0 }; + Student student = new Student("", "Leon", "Hunter", examScores); + + // When + Student[] preEnrollment = classroom.getStudents(); + classroom.addStudent(student); + Student[] postEnrollment = classroom.getStudents(); + + // Then + String preEnrollmentAsString = Arrays.toString(preEnrollment); + String postEnrollmentAsString = Arrays.toString(postEnrollment); + + System.out.println("==========================="); + System.out.println(preEnrollmentAsString); + System.out.println("==========================="); + System.out.println(postEnrollmentAsString); + } + + @Test + public void removeStudentTest () { + // : Given + int maxNumberOfStudents = 1; + Classroom classroom = new Classroom(maxNumberOfStudents); + Double[] examScores = { 100.0, 150.0, 250.0, 0.0 }; + Student student = new Student("", "Leon", "Hunter", examScores); + + // When + classroom.addStudent(student); + Student[] postEnrollment = classroom.getStudents(); + classroom.removeStudent("Leon", "Hunter"); + Student[] afterRemoval = classroom.getStudents(); + + // Then + String afterRemovalThing = Arrays.toString(afterRemoval); + String postEnrollmentAsString = Arrays.toString(postEnrollment); + System.out.println(postEnrollmentAsString); + System.out.println(afterRemovalThing); + } + + @Test + public void sortingByScoreTest () { + // "Cannot find local variable 'classroom' " from debugger with break on 92 + + Double[] examScores = {100.0, 150.0, 250.0, 0.0}; + Double[] examScores1 = {50.0, 75.0 , 125.0, 0.0}; + Double[] examScores2 = {200.0, 300.0 , 400.0, 50.0}; + Double[] examScores3 = {50.0, 75.0 , 125.0, 0.0}; + Double[] examScores4 = {0.0, 0.0}; + Double[] examScores5 = {1000.0}; + Student s = new Student("", "Leon", "Hunter", examScores); + Student s1 = new Student("", "Eric", "Weenermier", examScores1); + Student s2 = new Student("", "Kyle", "Calzone", examScores2); + Student s3 = new Student("", "Cal", "Weenermier", examScores3); + Student s4 = new Student("", "Ryan", "Coffee", examScores4); + Student s5 = new Student("", "Front", "Runner", examScores5); + + // When + Student[] student = {s, s1, s2, s3}; + Classroom classroom69 = new Classroom(student); + Student[] postEnrollment = classroom69.getStudents(); + classroom69.getStudentsByScore(); + Student[] afterSorting = classroom69.getStudents(); + + // Then + String postEnrollmentAsString = Arrays.toString(postEnrollment); + System.out.println(postEnrollmentAsString); + System.out.println(Arrays.toString(afterSorting)); + } + + @Test + public void getGradeBookTest () { // avg + // Given + Double[] examScores = {100.0, 150.0, 250.0, 0.0}; // 125.0 + Double[] examScores1 = {50.0, 75.0 , 125.0, 0.0}; // 62.5 + Double[] examScores2 = {200.0, 300.0 , 400.0, 50.0}; // 237.5 + Double[] examScores3 = {50.0, 75.0 , 125.0, 0.0}; // 62.5 + Double[] examScores4 = {0.0, 0.0}; // 0.0 + Double[] examScores5 = {1000.0}; // 1000.0 + Student s = new Student("", "Leon", "Hunter", examScores); + Student s1 = new Student("", "Eric", "Weenermier", examScores1); + Student s2 = new Student("", "Kyle", "Calzone", examScores2); + Student s3 = new Student("", "Cal", "Weenermier", examScores3); + Student s4 = new Student("", "Ryan", "Coffee", examScores4); + Student s5 = new Student("", "Front", "Runner", examScores5); + Student[] student = {s, s1, s2, s3, s4, s5}; + + // When + Classroom classroom69 = new Classroom(student); + Student[] actual = classroom69.getGradeBook(); + Student[] expected = {s5, s2, s, s1, s3, s4}; + + // Then + Assert.assertEquals(expected, actual); + } } diff --git a/src/test/java/io/zipcoder/StudentTest.java b/src/test/java/io/zipcoder/StudentTest.java index a9fedec..c9a0d93 100644 --- a/src/test/java/io/zipcoder/StudentTest.java +++ b/src/test/java/io/zipcoder/StudentTest.java @@ -1,5 +1,158 @@ package io.zipcoder; +import org.junit.Assert; +import org.junit.Test; +import org.junit.experimental.theories.suppliers.TestedOn; + +// Some tests on visually verified (no assert equals) + public class StudentTest { + @Test + public void getFirstNameTest() { + // Given + String firstName = "Jawnski"; + Double[] examScores = {69.0}; + Student student = new Student("", firstName, "Jawner", examScores); + + // When + String result = student.getFirstName(); + + // Then + Assert.assertEquals(result, firstName); + } + + @Test + public void getLastNameTest() { + // Given + String lastName = "Jawneroon"; + Double[] examScores = {69.1}; + Student student = new Student("", "Jawnskir", lastName, examScores); + + // When + String result = student.getLastName(); + + // Then + Assert.assertEquals(result,lastName); + } + + @Test + public void setFirstNameTest() { + // Given + String firstName = ""; + Double[] examScores = {69.0}; + Student student = new Student("", firstName, "Jawner", examScores); + + // When + student.setFirstName("Jawnerino"); + String result = student.getFirstName(); + + // Then + System.out.println(result); + } + + @Test + public void setLastNameTest() { + // Given + String lastName = ""; + Double[] examScores = {69.6}; + Student student = new Student("", "Jalapeno", lastName, examScores); + + // When + student.setLastName("Calzone"); + String result = student.getLastName(); + + // Then + System.out.println(result); + } + + @Test + public void getNumberOfExamsTakenTest() { + // Given + Double[] examScores = {40.5, 13.4, 1324.1, 134.1, 664.4}; + + // When + Student student = new Student("" , "Kyle", "Sinclair", examScores); + Integer result = student.getNumberOfExamsTaken(); + + // Then + System.out.println(result); + } + + @Test + public void getExamScoresTest() { + // Given + String firstName = "Leon"; + String lastName = "Hunter"; + Double[] examScores = {100.0, 95.0, 123.0, 96.0}; + Student student = new Student("", firstName, lastName, examScores); + + // When + String result = student.getExamScores(); + + // Then + System.out.println(result); // No need for Assert - User visually checks + } + + @Test + public void addExamScoreTest() { + // Given + String firstName = "Leon"; + String lastName = "Hunter"; + Double[] examScores = { }; + Student student = new Student("", firstName, lastName, examScores); + + // When + student.addExamScore(100.0); + String output = student.getExamScores(); + + // Then + System.out.println(output); + } + + @Test + public void setExamScoreTest() { + // : Given + String firstName = "Leon"; + String lastName = "Hunter"; + Double[] examScores = { 100.0, 96.0}; + Student student = new Student("", firstName, lastName, examScores); + + // When + student.setExamScore(1, 150.0); + String output = student.getExamScores(); + + // Then + System.out.println(output); + } + + @Test + public void getAverageExamScore() { + // : Given + String firstName = "Leon"; + String lastName = "Hunter"; + Double[] examScores = { 100.0, 150.0, 250.0, 0.0 }; + Student student = new Student("", firstName, lastName, examScores); + + // When + Double output = student.getAverageExamScore(); + + // Then + System.out.println(output); + } + + @Test + public void toStringTest() { + // : Given + String firstName = "Leon"; + String lastName = "Hunter"; + Double[] examScores = { 100.0, 150.0, 250.0, 0.0 }; + Student student = new Student("", firstName, lastName, examScores); + + // When + String output = student.toString(); + + // Then + System.out.println(output); + } } \ No newline at end of file diff --git a/target/classes/io/zipcoder/Classroom.class b/target/classes/io/zipcoder/Classroom.class new file mode 100644 index 0000000..e6ad12e Binary files /dev/null and b/target/classes/io/zipcoder/Classroom.class differ diff --git a/target/classes/io/zipcoder/Student.class b/target/classes/io/zipcoder/Student.class new file mode 100644 index 0000000..9658f64 Binary files /dev/null and b/target/classes/io/zipcoder/Student.class differ diff --git a/target/test-classes/io/zipcoder/ClassroomTest.class b/target/test-classes/io/zipcoder/ClassroomTest.class new file mode 100644 index 0000000..cd5cabf Binary files /dev/null and b/target/test-classes/io/zipcoder/ClassroomTest.class differ diff --git a/target/test-classes/io/zipcoder/StudentTest.class b/target/test-classes/io/zipcoder/StudentTest.class new file mode 100644 index 0000000..f199f9b Binary files /dev/null and b/target/test-classes/io/zipcoder/StudentTest.class differ