Hw 1


public class ObjectCreation {
    public static void main(String[] args) {
        Car car1 = new Car("Tesla", 2024);
        Car car2 = new Car("Honda", 2023);

        System.out.println(car1);
        System.out.println(car2);
    }
}

class Car {
    String brand;
    int year;

    public Car(String brand, int year) {
        this.brand = brand;
        this.year = year;
    }

    @Override
    public String toString() {
        return "Car: " + brand + ", Year: " + year;
    }
}

Output


Car: Tesla, Year: 2024 Car: Honda, Year: 2023

Hw #2


public class HeapVsStack {
    public static void main(String[] args) {
        int pages = 300;
        int pagesCopy = pages;
        
        Book b1 = new Book("Java Basics");
        Book b2 = b1;
        
        pages = 400;
        b1.title = "Advanced Java";
        
        System.out.println("=== Primitive Variables (Stack) ===");
        System.out.println("Original pages: " + pages);
        System.out.println("Copied pagesCopy: " + pagesCopy);
        System.out.println("Note: pagesCopy is INDEPENDENT\n");
        
        System.out.println("=== Object References (Heap) ===");
        System.out.println("Book b1: " + b1);
        System.out.println("Book b2: " + b2);
        System.out.println("Note: b2 points to SAME object as b1");
    }
}

class Book {
    String title;
    
    public Book(String title) {
        this.title = title;
    }
    
    @Override
    public String toString() {
        return "Book Title: " + title;
    }
}

Output


=== Primitive Variables (Stack) === Original pages: 400 Copied pagesCopy: 300 Note: pagesCopy is INDEPENDENT

=== Object References (Heap) === Book b1: Book Title: Advanced Java Book b2: Book Title: Advanced Java Note: b2 points to SAME object as b1

Pop hack1


public class Dog {
    private String name;
    private String breed;
    
    public Dog(String name, String breed) {
        this.name = name;
        this.breed = breed;
    }
    
    public void bark() {
        System.out.println(name + " says: Woof!");
    }
    
    public void printInfo() {
        System.out.println("My dog " + name + " is a " + breed + "!");
    }
}

class DogTest {
    public static void main(String[] args) {
        Dog d = new Dog("Fido", "Golden Retriever");
        d.bark();
        d.printInfo();
    }
}

Output


Fido says: Woof! My dog Fido is a Golden Retriever!

Popcorn hack 2


public class Counter {
    private int count;
    
    public void add(int x) {
        count += x;
    }
    
    public void subtract(int x) {
        count -= x;
    }
    
    public void multiply(int x) {
        count *= x;
    }
    
    public void divide(int x) {
        count /= x;
    }
    
    public int getCount() {
        return count;
    }
}

class CounterTest {
    public static void main(String[] args) {
        Counter c = new Counter();
        c.add(20);
        System.out.println("After add(20): " + c.getCount());
        
        c.subtract(5);
        System.out.println("After subtract(5): " + c.getCount());
        
        c.multiply(3);
        System.out.println("After multiply(3): " + c.getCount());
        
        c.divide(9);
        System.out.println("After divide(9): " + c.getCount());
        
        System.out.println("Final count: " + c.getCount());
    }
}

Output


After add(20): 20 After subtract(5): 15 After multiply(3): 45 After divide(9): 5 Final count: 5

MC hax

Question 1

Answer: B

BankAccount account = new BankAccount(100.0);
account.deposit(50.0);
double total = account.getBalance();

Question 2

Answer: C (48)

Initial: 3 × 4 = 12
After scale(2): 6 × 8 = 48

Question 3

Answer: B

When the method is called on a reference variable that has not been initialized to an object

Question 4

Answer:d

Temperature temp = new Temperature(15);
int result = temp.setCelsius(30);

Explanation: IT won't compile because setCelsius() is void and cannot be assigned to int result.

Question 5

Answer: D

javaSystem.out.println(novel.getPages());

Extra cred


public class StudentGradeTracker {
    public static void main(String[] args) {
        System.out.println("=== Student Grade Tracker System ===\n");

        System.out.println("Creating student: Emma Rodriguez");
        Student emma = new Student("Emma Rodriguez");
        System.out.println("Student created successfully!\n");

        System.out.println("--- Adding Grades for Emma ---");
        emma.addGrade(95);
        emma.addGrade(88);
        emma.addGrade(92);
        emma.addGrade(85);

        System.out.println("\n--- Emma's Grade Report ---");
        emma.printReport();

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

        System.out.println("Creating student: James Wilson");
        Student james = new Student("James Wilson");
        System.out.println("Student created successfully!\n");

        System.out.println("--- Adding Grades for James ---");
        james.addGrade(78);
        james.addGrade(82);
        james.addGrade(75);

        System.out.println("\n--- James's Grade Report ---");
        james.printReport();

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

        System.out.println("Final Summary:");
        System.out.println(emma.name + " - Average: " + String.format("%.2f", emma.getAverage()) + " (" + emma.getLetterGrade() + ")");
        System.out.println(james.name + " - Average: " + String.format("%.2f", james.getAverage()) + " (" + james.getLetterGrade() + ")");

        System.out.println("\n========================================");
        System.out.println("=== EXTRA CREDIT FEATURES DEMO ===");
        System.out.println("========================================\n");

        System.out.println("Creating student: Sarah Chen");
        Student sarah = new Student("Sarah Chen");
        sarah.addGrade(92);
        sarah.addGrade(65);
        sarah.addGrade(88);
        sarah.addGrade(95);
        sarah.addGrade(78);
        
        System.out.println("\n--- Sarah's Initial Report ---");
        sarah.printReport();
        System.out.println("Highest Grade: " + sarah.getHighestGrade());
        System.out.println("Lowest Grade: " + sarah.getLowestGrade());

        System.out.println("\n--- Dropping Lowest Grade (65) ---");
        sarah.dropLowestGrade();
        sarah.printReport();

        System.out.println("\n--- Comparing Students ---");
        int comparison = emma.compareTo(james);
        if (comparison > 0) {
            System.out.println(emma.name + " has a higher average than " + james.name);
        } else if (comparison < 0) {
            System.out.println(james.name + " has a higher average than " + emma.name);
        } else {
            System.out.println(emma.name + " and " + james.name + " have the same average");
        }

        System.out.println("\n--- Testing Weighted Grades ---");
        Student alex = new Student("Alex Johnson");
        alex.addWeightedGrade(85, 1.0);
        alex.addWeightedGrade(90, 1.5);
        alex.addWeightedGrade(78, 2.0);
        System.out.println("\n--- Alex's Weighted Grade Report ---");
        alex.printReport();

        System.out.println("\n--- Testing Reset Feature ---");
        Student test = new Student("Test Student");
        test.addGrade(100);
        test.addGrade(95);
        System.out.println("Before reset:");
        test.printReport();
        test.reset();
        System.out.println("\nAfter reset:");
        test.printReport();

        System.out.println("\n--- Testing Error Checking ---");
        Student errorTest = new Student("Error Test");
        errorTest.addGrade(-50);
        errorTest.addGrade(105);
        errorTest.addGrade(85);
        errorTest.printReport();
    }
}

class Student {
    String name;
    int totalPoints;
    int numAssignments;
    private int[] individualGrades;
    private double[] gradeWeights;
    private int gradeCapacity;
    private int actualGradeCount;

    public Student(String name) {
        this.name = name;
        this.totalPoints = 0;
        this.numAssignments = 0;
        this.gradeCapacity = 10;
        this.individualGrades = new int[gradeCapacity];
        this.gradeWeights = new double[gradeCapacity];
        this.actualGradeCount = 0;
    }

    public void addGrade(int points) {
        if (points < 0) {
            System.out.println("Adding grade: ERROR - Grade cannot be negative");
            return;
        }
        if (points > 100) {
            System.out.println("Adding grade: ERROR - Grade cannot exceed 100");
            return;
        }
        
        System.out.println("Adding grade: " + points + " points");
        
        if (actualGradeCount >= gradeCapacity) {
            expandArrays();
        }
        
        individualGrades[actualGradeCount] = points;
        gradeWeights[actualGradeCount] = 1.0;
        actualGradeCount++;
        
        totalPoints += points;
        numAssignments++;
    }

    public void addWeightedGrade(int points, double weight) {
        if (points < 0 || points > 100) {
            System.out.println("Adding weighted grade: ERROR - Invalid grade");
            return;
        }
        
        System.out.println("Adding weighted grade: " + points + " points (weight: " + weight + "x)");
        
        if (actualGradeCount >= gradeCapacity) {
            expandArrays();
        }
        
        individualGrades[actualGradeCount] = points;
        gradeWeights[actualGradeCount] = weight;
        actualGradeCount++;
        
        totalPoints += (int)(points * weight);
        numAssignments += (int)weight;
    }

    private void expandArrays() {
        gradeCapacity *= 2;
        int[] newGrades = new int[gradeCapacity];
        double[] newWeights = new double[gradeCapacity];
        
        for (int i = 0; i < actualGradeCount; i++) {
            newGrades[i] = individualGrades[i];
            newWeights[i] = gradeWeights[i];
        }
        
        individualGrades = newGrades;
        gradeWeights = newWeights;
    }

    public double getAverage() {
        if (numAssignments == 0) {
            return 0.0;
        }
        return (double) totalPoints / numAssignments;
    }

    public String getLetterGrade() {
        double avg = getAverage();
        if (avg >= 90) return "A";
        if (avg >= 80) return "B";
        if (avg >= 70) return "C";
        if (avg >= 60) return "D";
        return "F";
    }

    public void printReport() {
        System.out.println("Student Name: " + name);
        System.out.println("Total Points: " + totalPoints);
        System.out.println("Assignments Completed: " + numAssignments);
        System.out.println("Current Average: " + String.format("%.2f", getAverage()));
        System.out.println("Letter Grade: " + getLetterGrade());
        
        String status;
        double avg = getAverage();
        if (avg >= 90) {
            status = "Excellent work!";
        } else if (avg >= 80) {
            status = "Great job!";
        } else if (avg >= 70) {
            status = "Keep working hard!";
        } else if (avg >= 60) {
            status = "Needs improvement.";
        } else {
            status = "Please see instructor.";
        }
        System.out.println("Status: " + status);
    }

    public int getHighestGrade() {
        if (actualGradeCount == 0) {
            return 0;
        }
        
        int highest = individualGrades[0];
        for (int i = 1; i < actualGradeCount; i++) {
            if (individualGrades[i] > highest) {
                highest = individualGrades[i];
            }
        }
        return highest;
    }

    public int getLowestGrade() {
        if (actualGradeCount == 0) {
            return 0;
        }
        
        int lowest = individualGrades[0];
        for (int i = 1; i < actualGradeCount; i++) {
            if (individualGrades[i] < lowest) {
                lowest = individualGrades[i];
            }
        }
        return lowest;
    }

    public void dropLowestGrade() {
        if (actualGradeCount == 0) {
            System.out.println("No grades to drop");
            return;
        }
        
        int lowestIndex = 0;
        int lowestValue = individualGrades[0];
        
        for (int i = 1; i < actualGradeCount; i++) {
            if (individualGrades[i] < lowestValue) {
                lowestValue = individualGrades[i];
                lowestIndex = i;
            }
        }
        
        System.out.println("Dropping grade: " + lowestValue + " points");
        
        totalPoints -= (int)(individualGrades[lowestIndex] * gradeWeights[lowestIndex]);
        numAssignments -= (int)gradeWeights[lowestIndex];
        
        for (int i = lowestIndex; i < actualGradeCount - 1; i++) {
            individualGrades[i] = individualGrades[i + 1];
            gradeWeights[i] = gradeWeights[i + 1];
        }
        
        actualGradeCount--;
    }

    public int compareTo(Student other) {
        double thisAvg = this.getAverage();
        double otherAvg = other.getAverage();
        
        if (thisAvg > otherAvg) {
            return 1;
        } else if (thisAvg < otherAvg) {
            return -1;
        } else {
            return 0;
        }
    }

    public void reset() {
        System.out.println("Resetting all grades for " + name);
        totalPoints = 0;
        numAssignments = 0;
        actualGradeCount = 0;
        individualGrades = new int[gradeCapacity];
        gradeWeights = new double[gradeCapacity];
    }
}

Output


=== Student Grade Tracker System ===

Creating student: Emma Rodriguez Student created successfully!

— Adding Grades for Emma — Adding grade: 95 points Adding grade: 88 points Adding grade: 92 points Adding grade: 85 points

— Emma’s Grade Report — Student Name: Emma Rodriguez Total Points: 360 Assignments Completed: 4 Current Average: 90.00 Letter Grade: A Status: Excellent work!

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

Creating student: James Wilson Student created successfully!

— Adding Grades for James — Adding grade: 78 points Adding grade: 82 points Adding grade: 75 points

— James’s Grade Report — Student Name: James Wilson Total Points: 235 Assignments Completed: 3 Current Average: 78.33 Letter Grade: C Status: Keep working hard!

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

Final Summary: Emma Rodriguez - Average: 90.00 (A) James Wilson - Average: 78.33 (C)

======================================== === EXTRA CREDIT FEATURES DEMO === ========================================

Creating student: Sarah Chen Adding grade: 92 points Adding grade: 65 points Adding grade: 88 points Adding grade: 95 points Adding grade: 78 points

— Sarah’s Initial Report — Student Name: Sarah Chen Total Points: 418 Assignments Completed: 5 Current Average: 83.60 Letter Grade: B Status: Great job! Highest Grade: 95 Lowest Grade: 65

— Dropping Lowest Grade (65) — Dropping grade: 65 points Student Name: Sarah Chen Total Points: 353 Assignments Completed: 4 Current Average: 88.25 Letter Grade: B Status: Great job!

— Comparing Students — Emma Rodriguez has a higher average than James Wilson

— Testing Weighted Grades — Adding weighted grade: 85 points (weight: 1.0x) Adding weighted grade: 90 points (weight: 1.5x) Adding weighted grade: 78 points (weight: 2.0x)

— Alex’s Weighted Grade Report — Student Name: Alex Johnson Total Points: 376 Assignments Completed: 4 Current Average: 94.00 Letter Grade: A Status: Excellent work!

— Testing Reset Feature — Adding grade: 100 points Adding grade: 95 points Before reset: Student Name: Test Student Total Points: 195 Assignments Completed: 2 Current Average: 97.50 Letter Grade: A Status: Excellent work! Resetting all grades for Test Student

After reset: Student Name: Test Student Total Points: 0 Assignments Completed: 0 Current Average: 0.00 Letter Grade: F Status: Please see instructor.

— Testing Error Checking — Adding grade: ERROR - Grade cannot be negative Adding grade: ERROR - Grade cannot exceed 100 Adding grade: 85 points Student Name: Error Test Total Points: 85 Assignments Completed: 1 Current Average: 85.00 Letter Grade: B Status: Great job!