Ошибка Java для NumberFormatException

Вопрос: Я получаю эту ошибку, когда запускаю следующий код и вводя 5x5 для размера. Не знаете почему? Когда я вхожу в 10x10, кажется, что он работает нормально, но я не уверен, что результат правильный. Exception in thread "main" java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at java.lang.Integer.parseInt(Unknown Source)" Вот мой код

Вопрос:

Я получаю эту ошибку, когда запускаю следующий код и вводя 5×5 для размера. Не знаете почему?

Когда я вхожу в 10×10, кажется, что он работает нормально, но я не уверен, что результат правильный.

Exception in thread «main» java.lang.NumberFormatException: For input string: «» at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at java.lang.Integer.parseInt(Unknown Source)»

Вот мой код

import java.util.Scanner; public class CheckerBoard { public static void main(String [] args){ Scanner userInput = new Scanner(System.in); System.out.println(«What two colors would you like your board to be?»); String colorOne = userInput.next(); String colorTwo = userInput.next(); do { System.out.println(«How big should the checker board be? (Square sizes only please)» + «n» + «Please enter it like 4×4 with whatever numbers you choose.»); String boardSize = userInput.next(); int intOne = Integer.parseInt(boardSize.substring(0,boardSize.indexOf(«x»))); System.out.println(boardSize.indexOf(«x»)); int intTwo = Integer.parseInt(boardSize.substring(boardSize.indexOf(«x»)+1, boardSize.length()-1)); System.out.println(intOne); } while(false); } } //keep in mind that this program is not done yet, this is just a current issue I am having atm. Лучший ответ:

Проблема здесь:

int intTwo = Integer.parseInt(boardSize.substring(boardSize.indexOf(«x»)+1, boardSize.length()-1));

Вы берете подстроку от x до length — 1. Вы должны перейти от x к length потому что substring не включает второй индекс.

Итак, вы получили ошибку на 5×5 потому что после x есть только один символ. Таким образом, вы пытались parseInt пустую строку. У вас не было исключения на 10×10, но вы использовали только 10×1.

Таким образом, вы должны изменить эту строку следующим образом:

int intTwo = Integer.parseInt(boardSize.substring(boardSize.indexOf(«x»)+1, boardSize.length())); Ответ №1

Я считаю, что более безопасный способ сделать это – раскол на x

String boardSize = userInput.next(); String[] split = boardSize.split(«x»); int intOne = Integer.parseInt(split[0]); int intTwo = Integer.parseInt(split[1]);

Очевидно, санируйте для BAD INPUT!

Ответ №2

В вашем коде не учитывается, что строка boardSize может быть пуста, когда выполняется строка;

int intOne = Integer.parseInt(boardSize.substring(0,boardSize.indexOf(«x»)));

Когда вы выполняете “indexOf”, ища то, чего не существует, вы получите -1 назад, что является недопустимым как аргумент вашей подстроки.

Ответ №3

Вы пробовали это?

int intTwo = Integer.parseInt(boardSize.substring(boardSize.indexOf(«x»)+1, boardSize.length()));

Вероятно, чем дольше вы посмотрите, тем решите проблему синтаксического анализа.

Ответ №4

+ Изменить
int intTwo = Integer.parseInt(boardSize.substring(boardSize.indexOf(«x»)+1, boardSize.length()-1));
в
int intTwo = Integer.parseInt(boardSize.substring(boardSize.indexOf(«x»)+1, boardSize.length()));
Помните, что второй индекс, переданный в String.substring, не будет включен в возвращаемое значение.

Оцените статью
Добавить комментарий