boolean start;
start = false;
Scanner sc = new Scanner(System.in);
float alphaFloat;
do {
try{
System.out.println("Enter value for Alpha: ");
String alpha = sc.next();
if(alpha.contains(".")) {
System.out.println("Float stored");
alphaFloat = Float.valueOf(alpha);
start = true;
}
else {
System.out.println("Please enter a float. That was not a float.");
}
catch(NumberFormatException e) {
System.out.println("Please enter a number that is properly formatted");
}
finally {
System.out.println("\r\n");
}
}while(!start);
Вот ваш пример вывода:
Введите значение для альфа:
2.2.2.2
Invalid
Enter value for Alpha:
2
Please enter a float. That was not a float.
Enter value for Alpha:
3.5
Float stored
В вашем коде пользователь может ввести int технически, и он все равно будет выполняться, хотя у вас есть метод hasNextFloat () в вашем условном выражении. Я отредактировал код и сделал ввод строкой. Следовательно, если в строке есть десятичная дробь, мы можем привести ее к типу с плавающей точкой. Если десятичной дроби нет, мы знаем, что это не число с плавающей запятой, и запросим дополнительные данные. Теперь еще один фактор заключается в том, что при желании вы можете ввести любой пользовательский ввод в число с плавающей точкой. Вероятно, было бы также неплохо установить блок try-catch, чтобы вы могли обработать пользователя, потенциально вводящего неправильный номер.