Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 91 additions & 0 deletions src/main/java/io/zipcoder/Classroom.java
Original file line number Diff line number Diff line change
@@ -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<Student> 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<Student> 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<Student> 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<Student> students = Arrays.asList(this.getStudents());
Comparator<Student> byScore = Comparator.comparing(Student::getAverageExamScore);
Comparator<Student> byFirstName = Comparator.comparing(Student::getFirstName);

Collections.sort(students, byScore.thenComparing(byFirstName));
return students.toArray(new Student[0]);
}

public Student[] getGradeBook() {
Arrays.sort(student);
ArrayList<Student> 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]);
}
}

87 changes: 86 additions & 1 deletion src/main/java/io/zipcoder/Student.java
Original file line number Diff line number Diff line change
@@ -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 <Student> {

String firstName; // collection of characters representative of a first name
String lastName; // collection of characters representative of a last name
ArrayList<Double> 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());
}
}
142 changes: 142 additions & 0 deletions src/test/java/io/zipcoder/ClassroomTest.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
Loading