2009-12-08 2 views
1

Я получаю исключение NumberFormatException в методе Integer.parseInt(). Я знаю, что это исключение создается, когда что-то вроде «ab» передается методу, но я с трудом нахожу, где это происходит. Как я могу это исправить?Killing this NumberFormatException

Я использую Netbeans и пытаюсь отлаживать пометку на переменной caseStartLineSplitted[0], а затем нажимать f7, но код проходит через такие вещи, как класс Arrays, который мне неинтересен. Как я могу перейти прямо туда, где изменяется caseStartLineSplitted[0]?

Входной файл:

2 
3 2 1 
ab 
1 0 
2 0 
2 0 
2 
0 3 
abaa 
aab 
aba 
3 3 2 
ade 
0 1 2 
1 2 0 
2 1 0 
1 2 
2 2 
a 
de 



/* 
    * To change this template, choose Tools | Templates 
    * and open the template in the editor. 
    */ 

    package afd; 

    import java.io.*; 
import java.util.*; 

/** 
* 
* @author Administrator 
*/ 
public class Main { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) throws IOException { 
     // TODO code application logic here 

     FileReader fr = new FileReader("E://Documents and Settings//Administrator//My Documents//NetBeansProjects//AFD//src//afd//dfa.in"); 


     BufferedReader br = new BufferedReader(fr); 

     String firstLine= br.readLine(); 


     String [] firstLineSplitted = firstLine.split(" "); 

     /*debug*/ 
     System.out.println(firstLine); 

     int numberOfTestCases = Integer.parseInt(firstLine); 

     for (int indexOfTestCases =0; indexOfTestCases < numberOfTestCases; indexOfTestCases++ ){ 

      String caseStartLine = br.readLine(); 

      /*debug*/ 
      System.out.println(caseStartLine); 
      String [] caseStartLineSplitted = caseStartLine.split(""); 

      int numberOfStates = Integer.parseInt(caseStartLineSplitted[0]); 

      int numberOfAlphabetSymbols = Integer.parseInt(caseStartLineSplitted[1]); 

      //int numberOfFinalStates = Integer.parseInt(caseStartLineSplitted[2]); 

      String alphabetLine = br.readLine(); 

      for (int indexOfStates = 0; indexOfStates < numberOfStates; indexOfStates++){ 

        String ijLine = br.readLine(); 
        String [] ijLineSplitted = ijLine.split(" "); 

        int i = Integer.parseInt(ijLineSplitted[0]); 
        int j = Integer.parseInt(ijLineSplitted[1]); 


      } 

      String finalStatesLine = br.readLine(); 
      String finalStatesLineSplitted [] = finalStatesLine.split(" "); 
      ArrayList<Integer> finalStates = new ArrayList<Integer>(); 

      for (int conversionIndex =0; conversionIndex < finalStatesLineSplitted.length;) 

      } 

     } 
     } 

ответ

5

Я думаю, ваша ошибка недостающее место на этой линии:

String[] caseStartLineSplitted = caseStartLine.split(" "); 

Вы писали:

String[] caseStartLineSplitted = caseStartLine.split(""); 

Когда Меняю, что я получаю следующий выход, без ошибок:

2 
3 2 1 
0 3 
+0

Да, спасибо. – andandandand

2

Почему бы вам не окружать весь блок с Try/уловом NumberFormatException и обрабатывать его таким образом? Вам не нужно быть гранулированным, потому что, если в строке есть буквы, строка недействительна, и вы можете двигаться дальше.

1

Попробуйте использовать контрольные точки, начиная с

String [] caseStartLineSplitted = caseStartLine.split(""); 

и используя Step Over (F8)

0

Вы также можете использовать сканер (String) вместо раскола(), а затем использовать hasNext(), hasNextInt() и nextInt().