Вопрос:
Я получаю эту ошибку, когда запускаю следующий код и вводя 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, не будет включен в возвращаемое значение.