> Program a fridge
> Is the cooling process working, if not where did the error occur.
What the fuck does this mean? If you want to program something, make code that will actually do something. Unless you are actually building a controller with sensors for a real refrigerator, this is useless for anything other than trying to make an analogy for the absolute beginner to try to grasp concepts of object orientated programming in the first place. What you have given isn't so much expanding knowledge or practicing programming, but rather practicing building a class model. It's pretty much just UML practice.
Project Euler is good if you want to do math-based practice.
Good simple practice projects:
* Make a program that takes a number as input and outputs an isosceles triangle of the height of the number
* Make a program that will take a number as input, and outputs a calculator LCD style representation of the same number (as a bonus, you can try to include uppercase letters as well)
* Program a tagging system for files (where you can give a filename to the program, and the program will get the file attributes automatically, and you can also assign it tags, and search through this file database based on tags, similar to a booru system, if you're unfamiliar with tagging)
* Make a program that lets you play Tic Tac Toe
* Make a program that lets you play battleship, and will play with you (try to make good AI, which will attempt to intelligently cluster shots around hits and give up when the ship determined to be destroyed).
* Make a simple roguelike, including pathfinding, dungeon generation, and saving (this practices a lot of concepts, including serialization)
* Make a simple OS shell with a custom syntax, which will allow you to execute commands, redirect input and output, and store and use variables
* Make a simple custom scripting language
* Make a simple lisp interpreter
* If you have a cracked embedded device (like a softmodded Wii, DS, or 3DS) or a SOC (like Arduino or something of the sort), play around with some simple programming for it, to get a feel for some different toolchains.
The very best thing you can do to practice, though, is to take a program that exists, and without looking at its code, try to replicate its functionality. POSIX coreutils are ripe for this. Trying to implement those can be a lot of fun, especially in a non-standard language like Java.