如何在Java中修复此异常?

时间:2014-04-12 20:08:04

标签: java file-io

我的代码就像这样

 import java.io.File;
 import java.util.Scanner;

  public class ReadFile{
    public static void main(String[] args)throws Exception {
       Scanner scan = new Scanner(new File("input.txt"));
       int[][] arr = new int[4][4];

       for(int t = 1; t <= 2; t++){
        int firstRow = scan.nextInt();
        System.out.println(firstRow);
        for(int i = 0; i <= 4; i++){
         if(scan.hasNextLine()){
             String[] splited = scan.nextLine().split("\\s");
             for(String f : splited)
                System.out.println(f);
               for(int g = 0; g <= 4; g++){
                 arr[i][g] = Integer.parseInt(splited[i]); // at this point the exception is being thrown
              }
            }
          }

        }
      }

我正在尝试读取具有以下格式排列的数据的文件

 2
 1 2 3 4
 5 6 7 8
 9 10 11 12
 13 14 15 16
 3
 1 2 5 4
 3 11 6 15
 9 10 7 12
 13 14 8 16

基本上我想要读取第一个数字2(一行中的单个值)和3(再次从顶部第6行中的单个值)并将它们存储在firstRowNum变量和secondNumRow变量中,其余数字存储在两个4X4中矩阵。 但是当我运行代码时,我得到以下异常

  Exception in thread "main" java.lang.NumberFormatException: For input string: ""
 at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
 at java.lang.Integer.parseInt(Integer.java:504)
 at java.lang.Integer.parseInt(Integer.java:527)
 at ReadFile.main(ReadFile.java:20)

我想我没有正确设置循环。

由于

2 个答案:

答案 0 :(得分:3)

替换

splited[i]

f

作为Integer.parseInt()的参数。另外,不要为g索引使用另一个循环;使用

arr[i][g++]

并在每个循环的内部之前将g初始化为0。或者,按原样使用基于g的循环,但将splited[i]替换为splited[g]

您还有其他问题,例如使用

i <= 4

作为循环的上限条件,但是你的数组的索引范围从0到3(应该使用i < 4)。

答案 1 :(得分:1)

使用String.isEmpty()函数

,您可以在转换为String之前检查Integer是否为空