Как вернуть Integer.parseInt обратно в строку (для l oop) - PullRequest
0 голосов
/ 05 августа 2020

это код, который я пытаюсь исправить.

while (check){
                System.out.print("What you want to buy? (choose by #, or by Brand, or by ID): ");
                String choice = scan.next();

                for (int i = 0; i <= productList.getListOfProducts().size(); i++) {

                    if (choice.equals(productList.getListOfProducts().get(i).getBrand())
                    || choice.equals(productList.getListOfProducts().get(i).getProductSerialNumber())
                    || Integer.parseInt(choice) == i){
                    ...}
                        break;
                    }

Он хорошо работает, если я ввожу с клавиатуры цифры c или аналогичное правильное значение, которое равно productList.getListOfProducts () .get (0) .getBrand () или productList.getListOfProducts (). get (0) .getProductSerialNumber (). НО, если l oop переходит на второй шаг, он дает мне эту ошибку:

Исключение в потоке «main» java .lang.NumberFormatException: для входной строки: «AA00004» в java. base / java .lang.NumberFormatException.forInputString (NumberFormatException. java: 68) в java .base / java .lang.Integer.parseInt (Integer. java: 652) в java. base / java .lang.Integer.parseInt (Integer. java: 770) в Driver.main (Driver. java: 54)

Как я понимаю, когда проверка в IF достигает этой части (Integer.parseInt (choice) == i) Choice становится int для остальной части l oop. Что я могу сделать, чтобы снова возвращать его в формат String для каждого нового шага. Спасибо!

1 Ответ

0 голосов
/ 05 августа 2020

Причина, по которой вы это видите, заключается в том, что AA000004 не является допустимым целым числом, поскольку шестнадцатеричные представления не считаются целыми числами. Я бы предложил перехватить NumberFormatException, если это недопустимое целое число.

Если вы знаете, что ввод может быть шестнадцатеричным значением (или соответствовать любому другому регулярному шаблону), вы можете выполнить сопоставление RegEx (регулярное выражение) чтобы увидеть, соответствует ли он определенному шаблону. В зависимости от того, что более вероятно, вы захотите сначала проверить, может ли данная переменная choice (String) преобразоваться в целое число. Если это не так, вы можете либо дать соответствующий отзыв пользователю, либо проверить, является ли значение шестнадцатеричным (или любым другим предсказуемым форматом), и вычесть или преобразовать переменную из String в соответствующий тип данных.

Вы можно использовать https://commons.apache.org/proper/commons-validator/apidocs/org/apache/commons/validator/routines/IntegerValidator.html#validate% 28 java .lang.String% 29 (Apache класс IntegerValidator Commons) для проверки и возврата либо null, либо фактического целочисленного значения.

...