java-如何解决由混合数据类型的数据文件引起的InputMismatchException

时间:2018-09-03 22:31:49

标签: java input io

我的程序从一个包含整数和实数的文件中读取数据,并将数字分配给2个不同的数组。它会读取所有内容,直到我向数据文件添加应该用作菜单选项的字符为止。这是一个例子。

127856 55.55
569334 100.50
987104 2.33
222382 5000.00
321333 999.99
q

q指的是一个菜单选项,它几乎结束了程序。

char choice = sc.next().charAt(0);
switch (choice) {
case 'q':
case 'Q':
printAccts(acctNum, balance, numaccts);
notDone = false;
break;

数据文件末尾的q导致错误。编译器告诉我IntputMismatchException发生在两行。在这里,acctnum和balance是数组,而max只是一个常量整数。

int numaccts = readAccts(acctNum, balance, MAX); 

在** **之间的行。

public static int readAccts(int[] acctNum, double[] balance, int maxAccts)
throws Exception {
Scanner sc2 = new Scanner(new File("bankdata.txt"));
int count = 0;

while (sc2.hasNext() && count < maxAccts) {
**acctNum[count] = sc2.nextInt();**
balance[count] = sc2.nextDouble();
count++;
}

我认为我以前从未遇到过此问题,也不知道可以使用什么技术来解决它。有什么想法吗?

EDIT 第一个代码块和第二个代码块使用不同的方法

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是实现hasNextInt()hasNextDouble()方法:

while (sc2.hasNext() && count < maxAccts) {  
  if(!sc2.hasNextInt() || !sc2.hasNextDouble()) {
            break;
  }
  acctNum[count] = sc2.nextInt();
  balance[count] = sc2.nextDouble();

}