我无法运行这段代码。它抛出NumberFormatException

时间:2017-06-29 05:21:18

标签: java

获取NumberFormatException。我在这做错了什么? 我试图读取由空格分隔的整数数组。 有没有其他更好的方法来做同样的事情?我做了很多研究,大多数人都说split()比StringTokenizer和BufferedReader更好。

public static void main (String args[]) 
    {
    @SuppressWarnings("resource")
    Scanner io = new Scanner(System.in);
    int a=io.nextInt();
    String input;

    for(int i=0; i<a; i++)
     {   
         input = io.nextLine();
         int x= input.length();
         String[] splitArr = input.split("\\s+");
         int p[]= new int[x];
         int q=0;
         for (String par : splitArr) {
           p[q++] = Integer.parseInt(par);}

            System.out.println(p);
         }
    }

    }

更新的代码,现在正在使用:

public static void main (String args[]) 
    {
    @SuppressWarnings("resource")
    Scanner io = new Scanner(System.in);
    int a=io.nextInt();
    io.nextLine();
    String input;


    for(int i=0; i<a; i++)
     {   
         int x= io.nextInt();    //size of array
         io.nextLine();
         input = io.nextLine();
         String[] splitArr = input.split("\\s+");
         int p[]= new int[x];
         int q=0;
         for (String par : splitArr) {
           p[q++] = Integer.parseInt(par);}
         for(int m=0; m<x; m++)
            System.out.print(p[m]+" ");
         }
    }

    }

2 个答案:

答案 0 :(得分:1)

io.nextLine();之后(在您想要拍摄的任何字符串输入之前)执行int a=io.nextInt();(不将其存储在任何地方)。

这样的东西
    Scanner io = new Scanner(System.in);
    int a=io.nextInt();
    io.nextLine();
    String input;

循环遍历数组以正确获取值;不是System.out.prinltn(p);

答案 1 :(得分:-1)

尝试做这样的事情

    while(io.hasNext()){ 
        try{
            somevar = io.nextInt()
        }
        catch (NumberFormatException e){
            //just pass through this non int value or do some error handlin
        }
    }