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
147 changes: 147 additions & 0 deletions src/main/java/io/zipcoder/Classroom.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,151 @@
package io.zipcoder;

import java.util.*;

public class Classroom {

private Student[] students;
private int maxNumOfStudents;


public Classroom() {
this.students = new Student[30];
}

public Classroom(int maxNumOfStudents) {
this.students = new Student[maxNumOfStudents];

}

public Classroom(Student... students) {
this.students = students;
}

public Student[] getStudents() {
return students;
} //do I need to clone?

public double getAverageExamScore() {
double total = 0;
for (Student s : students) {
total += s.getAverageExamScore();
}

double average = total / correctForNull();

return average;
}

public void addStudent(Student student) {
for (int i = 0; i < students.length; i++) {
if (students[i] == null) {
students[i] = student;
break;
}

}

}

// ArrayList <Student> newEnrollment = new ArrayList<>(Arrays.asList(students));
// newEnrollment.add(student);
// this.students = newEnrollment.toArray(new Student[0]);

public void removeStudentbyName(String firstName, String lastName) {
ArrayList<Student> studentArray = new ArrayList<>(Arrays.asList(students));
for (int i = 0; i < studentArray.size(); i++) {
Student student = studentArray.get(i);
if (student == null) {
continue;
} else if (student.getFirstName().equals(firstName) && student.getLastName().equals(lastName)) {
studentArray.remove(student);
studentArray.add(null);
}
}
this.students = studentArray.toArray(new Student[0]);

}
// ArrayList<Student> studentArray = new ArrayList<>(Arrays.asList(students));
// for (int i = 0; i < studentArray.size() ; i++) {
// Student student = studentArray.get(i);
// if (student.getLastName().equalsIgnoreCase(lastName) && student.getFirstName().equalsIgnoreCase(firstName)) {
// studentArray.set(student);
// }
// } studentArray.add(null);

public Student[] getStudentByScore() {
List<Student> studentbyScore = new ArrayList<>(Arrays.asList(students));

Comparator<Student> byExamScores = Comparator.comparing(Student::getAverageExamScore);
Comparator<Student> byFullName = Comparator.comparing(Student::getFullName);

studentbyScore.sort(byExamScores.reversed().thenComparing(byFullName));

return studentbyScore.toArray(new Student[0]);
}

public Map <Student, Character> getGradeBookMap() {
Student[] studentArray = students;
Map<Student, Character> gradeBookAssigned = new HashMap<>();
for (int i = 0; i < correctForNull(); i++) {
gradeBookAssigned.put(studentArray[i], assignGrade(studentArray[i]));
}

return gradeBookAssigned;
}

public void getGradeBook(){
for (int i = 0; i < correctForNull(); i++) {
char grade = assignGrade(students[i]);
String name = students[i].getFullName();
System.out.println(name + " -> " + grade);

}
}

public char assignGrade(Student student){
double studentAvg = student.getAverageExamScore();
double classAvg = getAverageExamScore();
double deviation = getDeviation();

if (studentAvg >= classAvg + (2 * deviation)){
return 'A';
} else if (studentAvg >= classAvg + deviation) {
return 'B';
} else if (studentAvg >= classAvg){
return 'C';
}else if (studentAvg >= classAvg - deviation){
return 'D';
}
return 'F';
}

public double getDeviation() {
double deviation = 0;
double classAverage = getAverageExamScore();
for (Student s : students) {
if (s == null) {
deviation += 0;
} else {
double diff = classAverage - s.getAverageExamScore();
deviation += Math.pow(diff, 2);
}
}
double squaredDev = deviation / correctForNull();
return Math.sqrt(squaredDev);


}

public int correctForNull() {
int studentCount = 0;
for (Student student : students) {
if (student != null) {
studentCount++;
}
}
return studentCount;

}

}
75 changes: 75 additions & 0 deletions src/main/java/io/zipcoder/Student.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,79 @@
package io.zipcoder;

import java.util.ArrayList;
import java.util.Arrays;

public class Student {

private String firstName;
private String lastName;
ArrayList<Double> examScores;

public Student(String givenFirstName, String givenLastName, Double...examScores) {
this.firstName = givenFirstName;
this.lastName = givenLastName;
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 String getFullName (){
return this.firstName + " " + this.lastName;
}

public Integer getNumberOfExamsTaken(){
return examScores.size();
}

public String getExamScores(){
String output = "Exam Scores: \n";

for (int i = 0; i < examScores.size(); i++) {
output += "\t Exam " + (i + 1) + " -> ";
output += examScores.get(i);
output += "\n";

}
return output;
}

public void addExamScore(double score){
examScores.add(score);
}

public void setExamScore(int testNumber, double newScore){
examScores.remove(testNumber-1);
examScores.add(testNumber-1, newScore);
}

public Double getAverageExamScore(){
double total = 0;
for (double score: examScores) {
total += score;
}
Double avg = total/examScores.size();

return avg;
}

@Override
public String toString(){
return String.format("Student Name: %s %s\n" + "> Average Score: %.1f \n" + "> %s", firstName, lastName, getAverageExamScore(), getExamScores());
}


}
Loading