String UNP;
Scanner in = new Scanner(System.in);
UNP = in.next();
if(Integer.parseInt(UNP) > 1 && Integer.parseInt(UNP) <= 21)
out.println("\n Объект выбран\n");
else
out.println("\n Ошибка выбора объекта\n");
При вводе строки состоящей не только из цифр происходит ошибка.
Exception in thread "main" java.lang.NumberFormatException: For input string: "qq" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang.Integer.parseInt(Integer.java:615) at Levchenko.App.CLIENT_OBJECT.INPUT_UNP(CLIENT_OBJECT.java:44) at Levchenko.App.Main.main(Main.java:8) ------------------------------------------------------------------------ BUILD FAILURE ------------------------------------------------------------------------ Total time: 2.986s Finished at: Fri Mar 03 22:58:41 MSK 2017 Final Memory: 6M/106M ------------------------------------------------------------------------ Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2.1:exec (default-cli) on project App: Command execution failed. Process exited with an error: 1 (Exit value: 1) -> [Help 1]
To see the full stack trace of the errors, re-run Maven with the -e switch. Re-run Maven using the -X switch to enable full debug logging.
For more information about the errors and possible solutions, please read the following articles: [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
Как мне перед преобразованием string
в int
и проверкой на соответствие диапазону чисел проверить возможность преобразования string
в int
для сравнения?
do {
UNP = in.next();
if(UNP.matches("\\d+")){
if(Integer.parseInt(UNP) > 1 && Integer.parseInt(UNP) <= 21)
out.println(" Объект выбран\n");
else
out.println(" Ошибка выбора объекта\n");
}
else
out.println(" Ошибка выбора объекта\n");
}
while(Integer.parseInt(UNP) < 1 || Integer.parseInt(UNP) > 21);
Если введена строка не только с цифрами то условие отрабатывает 1 раз, выводит такую же ошибку и выходит из do while.
Исправил присвоением перед проверкой while.
Можно использовать обработку исключений:
String UNP;
Scanner in = new Scanner(System.in);
UNP = in.next();
try{
if(Integer.parseInt(UNP) > 1 && Integer.parseInt(UNP) <= 21)
System.out.println("\n Объект выбран\n");
else
System.out.println("\n Ошибка выбора объекта\n");
}
catch(NumberFormatException e){
System.out.println("\n Неверный формат\n");
}
Можно добавить функцию, действие которой также заключается в обработке исключений. Получится примерно так:
public static void main (String[] args){
String UNP;
Scanner in = new Scanner(System.in);
UNP = in.next();
if(isNumber(UNP)){
if(Integer.parseInt(UNP) > 1 && Integer.parseInt(UNP) <= 21)
System.out.println("\n Объект выбран\n");
else
System.out.println("\n Ошибка выбора объекта\n");
}
else
System.out.println("\n Неверный формат\n");
}
public static boolean isNumber(String s) {
try {
Integer.parseInt(s);
return true;
} catch (NumberFormatException e) {
return false;
}
}
Ещё проверить, является ли строка целым (неотрицательным) числом можно с помощью регулярных выражений:
if(UNP.matches("\\d+")){
if(Integer.parseInt(UNP) > 1 && Integer.parseInt(UNP) <= 21)
System.out.println("\n Объект выбран\n");
else
System.out.println("\n Ошибка выбора объекта\n");
}
else
System.out.println("\n Неверный формат\n");
Для любых целых чисел выражение будет такое:
UNP.matches("-?\\d+")
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Если в фале в одной строке даны и символы и числа, как правильно считывать данные чтобы была возможность сохранить и int и char отдельноНапример...