2009-12-08 101 views
1

我收到Integer.parseInt()方法NumberFormatException。我知道这个异常是在类似“ab”的东西传递给方法时产生的,但我很难找到发生这种情况的地方。 我该如何解决这个问题?杀死此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 2009-12-08 21:39:16

2

你为什么不围绕整个块与一个try/catch NumberFormatException并处理它的方式?你不需要细化,因为如果一行中的任何地方有字母,该行是无效的,你可以继续前进。

1

尽量使用断点开始

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

,并使用跳过(F8)

0

你也可以使用扫描仪(字符串),而不是分裂(),然后使用hasNext(),hasNextInt()和nextInt()。