Я только что опробовал вашу программу, и единственная реальная проблема, которую я вижу, состоит в том, что у вас есть этот бит в начале, который ждет ввода пользователя:
try {
double r = sc.nextDouble();
}
catch( NumberFormatException e ) {
System.err.println("Invalid Input, please enter a number");
//put a message or anything you want to tell the user that their input was weird.
}
Поскольку этот код приходит до , программа выдает какой-либо вывод, в результате программа просто зависает; пользователю не очевидно, что он должен вводить число. (И действительно, им не нужно беспокоиться о том, сколько цифр они вводят, поскольку программа просто предлагает им ввести еще один номер чуть позже:
double r = sc.nextDouble(); // Read in the double from the keyboard
и именно этот второй фактически используется.)