Popcorn Hack 1

class Dog {
    private String name;
    private String breed;
    
    Dog(String name, String breed) {
        this.name = name;
        this.breed = breed;
    }

    public void callDog() {
        System.out.println("My dog " + this.name + " is a " + this.breed);
    }
}

Dog fido = new Dog("Fido", "dog breed");

fido.callDog();
My dog Fido is a dog breed

Popcorn Hacks 2

class Counter {
    private double count;

    Counter() {
        this.count = 0.0;
    }

    public void add(double x) {
        this.count += x;
    }

    public void subtract(double x) {
        this.count -= x;
    }

    public void multiply(double x) {
        this.count *= x;
    }

    public void divide(double x) {
        this.count /= x;
    }

    public double getCount() {
        return count;
    }
}

Counter c = new Counter();

c.add(5.0);
c.subtract(1.0);
c.multiply(2.0);
c.divide(4.0);

double val = c.getCount();

System.out.println("Final Value: " + val);
Final Value: 2.0

Homework Hack

import java.lang.Math;
import java.util.ArrayList;

class Student {
    private String name;
    private int totalPoints;
    private int totalAssignments;

    private ArrayList<String> assignments;
    private ArrayList<Double> grades;

    private int maxTotalPoints;
    private double currentGrade;
    private double weightSum;

    Student(String name) {
        this.name = name;
        this.totalPoints = 0;
        this.totalAssignments = 0;

        this.assignments = new ArrayList<>();
        this.grades = new ArrayList<>();

        this.maxTotalPoints = 0;
        this.currentGrade = 100.0;
        this.weightSum = 0.0;

        System.out.println("Creating Student: " + this.name);
        System.out.println("Student created successfully!");
        System.out.println("");
    }

    private double avgGrade() {
        double sum = 0;

        for (Double g : this.grades) {
            sum += Math.max(0, g);
        }

        double avg = sum;
        if (this.grades.size() <= 0) {
            avg = 1.0;
        }
        else {
            double len = 1 / this.grades.size();
            avg = sum / this.weightSum;
        }

        return avg;
    }

    public void addAssignment(String assignmentName, int points, int maxPoints, double weight) {
        this.grades.add((double)(weight * points / maxPoints));
        this.assignments.add(assignmentName);

        this.totalPoints += points;
        this.maxTotalPoints += maxPoints;

        this.weightSum += weight;

        double perc = ((double) points/maxPoints) * 100.0;

        int grade = Math.max(0, (int)(perc));

        this.totalAssignments = this.assignments.size();

        System.out.println("Adding Grade: " + grade + "%");
    }

    public double getAverage() {
        return (double)((this.totalPoints / this.maxTotalPoints)*100.0);
    }

    public String getGrade() {
        this.currentGrade = (int)(this.avgGrade()*100.0);
        String letterGrade = "";
        String suffix = "";
        if (this.currentGrade >= 90) {
            letterGrade = "A";

            if (this.currentGrade >= 96) {
                suffix = "+";
            }
            else if (this.currentGrade <= 94) {
                suffix = "-";
            }
        }
        else if (this.currentGrade >= 80 && this.currentGrade <= 89.9) {
            letterGrade = "B";

            if (this.currentGrade >= 86) {
                suffix = "+";
            }
            else if (this.currentGrade <= 84) {
                suffix = "-";
            }
        }
        else if (this.currentGrade >= 70 && this.currentGrade <= 79.9) {
            letterGrade = "C";

            if (this.currentGrade >= 76) {
                suffix = "+";
            }
            else if (this.currentGrade <= 74) {
                suffix = "-";
            }
        }
        else if (this.currentGrade >= 60 && this.currentGrade <= 69.9) {
            letterGrade = "D";

            if (this.currentGrade >= 66) {
                suffix = "+";
            }
            else if (this.currentGrade <= 64) {
                suffix = "-";
            }
        }
        else {
            letterGrade = "F";

            if (this.currentGrade >= 56) {
                suffix = "+";
            }
            else if (this.currentGrade <= 54) {
                suffix = "-";
            }
        }
        
        String result = letterGrade + suffix;

        return result;
    }

    public void reset() {
        this.assignments = new ArrayList<>();
        this.grades = new ArrayList<>();

        this.totalPoints = 0;
        this.maxTotalPoints = 0;

        System.out.println("Reset " + this.name + "'s Report Card :(");
    }

    public void gradeReport() {
        System.out.println("--- " + this.name + "'s Grade Report ---");
        System.out.println("Total Points: " + this.totalPoints);
        System.out.println("Current Grade Average: " + (int)(this.avgGrade() * 100.0));
        System.out.println("Current Letter Grade: " + this.getGrade());
        System.out.println("Good enough, I guess...");
    }
}

System.out.println("=== Student Grade Tracker System ===");
System.out.println("");

Student carl = new Student("Carl Smite");

System.out.println("--- Adding Grades for Carl ---");
carl.addAssignment("Homework 1", 9, 10, 0.1);
carl.addAssignment("Homework 2", 10, 10, 0.1);
carl.addAssignment("Test", 96, 100, 0.9);
carl.addAssignment("Test Review", 46, 50, 0.1);

System.out.println("");

carl.gradeReport();

System.out.println("");

System.out.println("========================================");
System.out.println("");

Student antiCarl = new Student("Anti Carl");

System.out.println("--- Adding Grades for Anti Carl ---");
antiCarl.addAssignment("Homework 1", -9, 10, 0.1);
antiCarl.addAssignment("Homework 2", -10, 10, 0.1);
antiCarl.addAssignment("Test", -96, 100, 0.9);
antiCarl.addAssignment("Test Review", -46, 50, 0.1);

System.out.println("");

antiCarl.gradeReport();

System.out.println("");

antiCarl.reset();

System.out.println("");

antiCarl.gradeReport();
=== Student Grade Tracker System ===

Creating Student: Carl Smite
Student created successfully!

--- Adding Grades for Carl ---
Adding Grade: 90%
Adding Grade: 100%
Adding Grade: 96%
Adding Grade: 92%

--- Carl Smite's Grade Report ---
Total Points: 161
Current Grade Average: 95
Current Letter Grade: A
Good enough, I guess...

========================================

Creating Student: Anti Carl
Student created successfully!

--- Adding Grades for Anti Carl ---
Adding Grade: 0%
Adding Grade: 0%
Adding Grade: 0%
Adding Grade: 0%

--- Anti Carl's Grade Report ---
Total Points: -161
Current Grade Average: 0
Current Letter Grade: F-
Good enough, I guess...

Reset Anti Carl's Report Card :(

--- Anti Carl's Grade Report ---
Total Points: 0
Current Grade Average: 100
Current Letter Grade: A+
Good enough, I guess...

Self Grade Table

Criteria Percent Weight Description
Functionality 40% My code works and allows for weight percentages and without weighting. I deserve 100%.
Method Implementation 30% I included all methods and some more to make sure that other extra credit scripts work. I deserve 100%.
Code Quality 20% My code is beautiful. I deserve 100%.
Output & Presentation 10% My output matches the example output so it is beautiful. I deserve 100%.