Как устранить исключение InputMismatchException, вызванное файлом данных со смешанными типами данных - PullRequest
0 голосов
/ 04 сентября 2018

Моя программа считывает данные из файла, который содержит целые и действительные числа, и назначает числа в 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++;
}

Я не думаю, что когда-либо сталкивался с этой проблемой раньше, и я не знаю, какие методы я мог бы использовать, чтобы ее исправить. Есть идеи?

РЕДАКТИРОВАТЬ первый блок кода и второй блок кода в различных методах

1 Ответ

0 голосов
/ 04 сентября 2018

Один из способов сделать это - реализовать методы hasNextInt() и hasNextDouble():

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...