我知道这个错误有很多主题,但我找不到任何问题的解决方案。我正在尝试实现一个程序,该程序读取文件并将部分数据放入对象中,同时将这些数据放入一个数组中。文件的每一行都是一个对象,我称之为Client
或VIPClient
,具体取决于值是否为真。这是错误:
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
然后解析它,但它只给了我更多问题。如果你能就如何解决错误给我一些建议,我将非常感激。
答案 0 :(得分:1)
请勿使用nextInt
。使用nextLong
,因为1234567890123456
超出了整数范围(请参阅Integer.MIN_VALUE
和Integer.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
中解析它。 long
有64
位,因此最大值为2 63 -1或:
maximum bound 9 223 372 036 854 775 807
value 1 234 567 890 123 456
因此,这是有界限的,可以表示。
你遇到的另一件事就是你打电话:
closeFile(xclientes);
如果按照我认为的方式执行此操作,则在进行新循环之前关闭流。这可能会导致错误。
事实上,你的循环根本没有多大意义,因为它会覆盖最初存储在那里的所有数据。此外,一旦你读了一个记录,你就会回来。因此,无论如何你永远不会取第二个人。