java.util.InputMismatchException错误读取文件

时间:2015-02-23 17:44:30

标签: java

我知道这个错误有很多主题,但我找不到任何问题的解决方案。我正在尝试实现一个程序,该程序读取文件并将部分数据放入对象中,同时将这些数据放入一个数组中。文件的每一行都是一个对象,我称之为ClientVIPClient,具体取决于值是否为真。这是错误:

Exception in thread "main" java.util.InputMismatchException: For input string: "1234567890123456"
at java.util.Scanner.nextInt(Scanner.java:2166)
at java.util.Scanner.nextInt(Scanner.java:2119)
at javaapplication1.readfile.readFile(readfile.java:31)
at javaapplication1.main.main(main.java:16)

这是代码:

public static Client[] readClients(Client[] arraycl){
//arraycl is the empty array where the objects will be placed
        do{
        String name=xclientes.next();
        String dni=xclientes.next(); //dni is id
        int ccnumber=xclientes.nextInt();//the error is here
        int drivingyear=xclientes.nextInt();
        boolean vip=xclientes.nextBoolean(); 
        int vipcard=xclientes.nextInt();
        for (int i=0; i<=arraycl.length ;i++){
            arraycl[i] = new VIPClient(name,dni,ccnumber,drivingyear,0,null,true,vipcard);
            arraycl[i]=new Client(name,dni,ccnumber,drivingyear,0,null,false);
            arraycl[i]=new Client(name,dni,ccnumber,drivingyear,0,null,false);
            arraycl[i]=new Client(name,dni,ccnumber,drivingyear,0,null,false);   
            arraycl[i]= new VIPClient(name,dni,ccnumber,drivingyear,0,null,true,vipcard);
            arraycl[i]= new VIPClient(name,dni,ccnumber,drivingyear,0,null,true,vipcard);
            arraycl[i]=new Client(name,dni,ccnumber,drivingyear,0,null,false);
            arraycl[i]= new Client(name,dni,ccnumber,drivingyear,0,null,false);
            arraycl[i]=new Client(name,dni,ccnumber,drivingyear,0,null,false);
            arraycl[i]= new Client(name,dni,ccnumber,drivingyear,0,null,false);
            closeFile(xclientes);
        }  //end for
        return arraycl;
        } while (xclientes.hasNext());

}//end readClientes 

之后将设置0和null值,因此这里是文本文件:

Turing 55550000A 1234567890123456 5 true 1
Knuth 55550001B 0001000000000000 13 false
Wirth 55550010C 0010000000000000 1 false
Dijkstra 55550100D 1100000000000000 2 false
Allen 55551000E 1000000000000000 6 true 2
Curie 55550101M 0101000000000000 3 true 3
Pearl 55550110K 0110000000000000 4 false
Liskov 55551111K 1111000000000000 15 false
Pearl 55550110K 0110000000000000 8 false
Codd 55551110P 1110000000000000 7 false

文件的结构是:

name(String) id(String) ccnumber(int) drivinyear(int) vip(boolean) vipcard (int)

我认为问题是netbeans认为ccnumber是字符串,显然不是(1234567890123456),或者数字太大(可能不是)但我不知道该怎么做。我尝试将ccnumber作为String然后解析它,但它只给了我更多问题。如果你能就如何解决错误给我一些建议,我将非常感激。

2 个答案:

答案 0 :(得分:1)

请勿使用nextInt。使用nextLong,因为1234567890123456超出了整数范围(请参阅Integer.MIN_VALUEInteger.MAX_VALUE here)。

答案 1 :(得分:0)

int使用32位,因此范围从-2 31 到2 31 -1,因此最大值为:

maximum bound    2 147 483 648
value    1 234 567 890 123 456

所以很明显你无法在int中解析它。 long64位,因此最大值为2 63 -1或:

maximum bound 9 223 372 036 854 775 807
value             1 234 567 890 123 456

因此,这是有界限的,可以表示。


你遇到的另一件事就是你打电话:

closeFile(xclientes);

如果按照我认为的方式执行此操作,则在进行新循环之前关闭流。这可能会导致错误。

事实上,你的循环根本没有多大意义,因为它会覆盖最初存储在那里的所有数据。此外,一旦你读了一个记录,你就会回来。因此,无论如何你永远不会取第二个人。