2014-02-17 3 views
2

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

Когда я вхожу 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)" 

Вот мой код

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 4x4 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. 
+0

Это поможет, если вы можете указать строку, из которой исходит исключение. Для меня кажется, что вы используете неправильные индексы для хотя бы одного из вызовов метода подстроки. –

ответ

1

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

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

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

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

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

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

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

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

Когда вы делаете «IndexOf», в поисках чего-то, что не существует - вы получите -1 спины, что является недопустимым в качестве аргумента в вашей подстроки.

0

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

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

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

2

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

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

Очевидно дезинфицировать для BAD ВХОД!

0

Изменить
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 не будет включен в возвращаемом значении.

Смежные вопросы