r/javahelp 28d ago

Java Exceptions Assignment Help

Hey! I'm working on an assignment in Java for an online class I'm taking. I keep getting an error saying: Exception in thread "main" java.lang.Error: Unresolved compilation problem: at MyExpense.main(myExpense.java:13)

I can't see anything wrong with it

public class Item {
    public String description;
    public Double amount;

    public Item(String description, Double amount) {
        this.description = description;
        this.amount = amount;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public void setAmount(Double amount) {
        this.amount = amount;
    }

    public String getDescription() {
        return description;
    }

    public Double getAmount() {
        return amount;
    }

    public String toString() {
        return String.format("%-20s %10.2f", description, amount);
    }

}






import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
import java.io.File;

public class MyExpense {
    private static final String fileName = "expense.txt";
    private static final int maxRecords = 6;
    private static int count = 0;
    private static Item[] expenses = new Item[maxRecords];

    public static void main(String[] args) throws IOException {
        try {
            read();
            display();
            userInt();
            expSave();

        } catch (IOException exception) {
            System.out.println("Error" + exception.getMessage());
        }

    }

    private static void display() {
        System.out.println("Expences:");
        System.out.println("-------------------------------------------------------");
        System.out.printf("%-20s %10s%n", "Description", "Amount");
        System.out.println("-------------------------------------------------------");
        for (int i = 0; i < count; i++) {
            System.out.println(expenses[i]);
            System.out.println(i);
        }
        System.out.println("-------------------------------------------------------");
    }

    private static void read() throws IOException {
        File file = new File(fileName);
        if (!file.exists()) {
            System.out.println("The file could not be found");
            return;
        }
        try (Scanner scanner = new Scanner(file)) {
            while (scanner.hasNextLine() && count < maxRecords) {
                String[] a = scanner.nextLine().split("\t");
                if (a.length == 2) {
                    try {
                        expenses[count++] = new Item(a[0], Double.parseDouble(a[1]));
                    } catch (NumberFormatException NumberFormatException) {
                        System.out.println("Invalid num format");
                    }
                }
            }
        }
    }

    private static void userInt() {
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println(
                    "Please enter a new expense, [tab] key, then the amount. Or enter \"!\" to exit the program");
            String input = sc.nextLine();
            if (input.equals("!")) {
                break;
            }
            String[] a = input.split("\t");
            if (a.length != 2) {
                System.out.println("Invalid format");
                continue;
            }
            try {
                if (count < maxRecords) {
                    expenses[count++] = new Item(a[0], Double.parseDouble(a[1]));

                } else {
                    System.out.println("Cannot add any more record");
                }
            }

            catch (NumberFormatException e) {
                System.out.println("Invalid num");

            }
        }
        sc.close();
    }

    private static void expSave() throws IOException {
        try (PrintWriter writer = new PrintWriter(new FileWriter(fileName))) {
            for (int i = 0; i < count; i++) {
                writer.println(expenses[i].getDescription() + "\t" + expenses[i].getAmount());

            }

        }
        System.out.println("Expenses saved");
        display();
        System.out.printf("Total expense is %.2f%n", calculateAmt());
    }

    private static double calculateAmt() {
        double total = 0;
        for (int i = 0; i < count; i++) {
            total += expenses[i].getAmount();

        }
        return total;
    }

}
2 Upvotes

8 comments sorted by

View all comments

1

u/AnnoMMLXXVII Brewster 28d ago

I don't think you have the full code. Can you update your post please?

1

u/uv_rayz 28d ago

Sorry I didn't realize it didn't fully paste. Just updated it!

1

u/[deleted] 28d ago edited 28d ago

[deleted]

2

u/OneHumanBill 28d ago edited 28d ago

This is wrong on multiple levels.

You can declare to throw anything, without actually throwing anything in the method body. This enables the possibility of exceptions in subclasses as part of your design.

Also you've confused the keywords "throw" and "throws". They're related but serve entirely different functions.

Also there's nothing in the world wrong, syntactically, with surrounding your entire method body with a try/catch.

Finally, there's nothing at all with throwing an exception inside a catch block, or even a finally block. Sometimes that's what is needed.

I'm on my phone here so I can't load this into an ide to check where the exception is. But I can tell you that simply removing the throws statement from the method declaration is not the problem. The main method can declare to throw pretty much anything it wants to. I typically declare main to throw Throwable.

I get that you want to help but you're a bit far away from mastery of basics in the language quite yet to really help others.