Java Complex Program