Когда вы запрашиваете пользователя в Java (при условии, что вы используете System.in или JTextField), то, что вы читаете из пользовательского ввода, является текст.
Если вы хотите преобразовать текст в a double существует несколько подходов, но вы можете использовать:
do {
String promptValue = prompt();
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(16); // maximum for double
Number num = nf.parse(promptValue):
} while (null == num);
Обратите также внимание на то, что вы можете запрашивать символ за символом и анализировать постепенно, поэтому вам не нужно снова запрашивать, а скорее отбрасывать все, что не соответствие. Это будет хорошо работать в Swing, или вы можете использовать jline3 , если вы действительно хотите усложнить задачу.
Чтобы узнать, как выполнять синтаксический анализ, посмотрите: https://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html