#java
Вопрос:
это моя функция для управления двойным вводом от пользователя, но она управляет только целочисленными значениями, если пользователь вводит запятую’, ‘символ, например, 100 300, он отказывается его принимать, поэтому я подумываю о следующем : когда функция встретит символ запятой’, ‘ он изменит его на символ точки ‘.’ и тогда мне интересно, можно ли теперь преобразовать строковое значение в двойное, например «100.300» `
public static double controlDoubleInput() {
Scanner scanner = new Scanner(System.in).useDelimiter("n");
String option = scanner.next();
boolean isNotDigit = true;
char[] array = option.toCharArray();
do {
for(char c : array) {
if(Character.isDigit(c)) {
isNotDigit = false;
}
else {
isNotDigit = true;
break;
}
}
if(isNotDigit) {
System.out.println("input mismatch please retry : ");
option = scanner.next();
array = option.toCharArray();
}
} while(isNotDigit);
return Double.parseDouble(option);
}
`
Комментарии:
1. Почему вы не пользуетесь
nextDouble()
?2. Здравствуйте, это потому, что я не хочу, чтобы программа останавливалась, я знаю, что могу поймать исключение, но я не знаю, как выполнить цикл, проверяя исключение, например, если исключения нет, то выйдите из цикла, иначе продолжайте требовать от пользователя двойное значение, если вы знаете, как это сделать, помогите !
3. Вы можете использовать
hasNextDouble()
его, чтобы проверить, будет ли следующее чтениеnextDouble()
успешным или нет. Используйте это либо для использованияnextDouble()
, либоnext()
для пропуска пользовательского ввода.
Ответ №1:
Используйте локализацию.
try (Scanner scanner = new Scanner(System.in).useDelimiter("n")) {
String option = scanner.next();
NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);
while (true) {
try {
return nf.parse(option).doubleValue();
} catch (ParseException e) {
System.out.println("input mismatch please retry : ");
option = scanner.next();
}
}
}