Hey there, what might be causing it:
1. Some of your fines are commented out
2. The code "int fine = item * overdue" sets the fine only at initialisation so it is always initialised as 0. It will not be used as a
pattern. Did you program in C before? I think I saw such patterns in C.
3. You are casting double values to int by using (int). If you wanted to use it to make the use of the Scanner or value comparison easier you could use Cents instead. You can still output it to $ later.
4. The order of operations in your if clauses may be different from what you expect it to be.
For instance: age >= 6 || age < 18 && fine > 5
Could be computed as: (age >= 6) || (age < 18 && fine >5) // I think that is the order in
Java, but I'm not sure
Or might as well be: (age >= 6 || age < 18) && (fine > 5)
Better use brackets to force the order of operations and make it more clear.
5. Your IF- ELSE statements are a bit complicated and could be optimised. That would make it easier to find possible mistakes. If you want you could try to draw a diagram to check your logic.
NSD for instance:
https://en.wikipedia.org/wiki/Nassi%E2%80%93Shneiderman_diagram
You can use pen and paper or
http://structorizer.fisch.lu/