Массивы заполняются нулями вместо имен и 0 вместо чисел

1

Мне нужно заполнить два отдельных массива именами из текстового файла и соответствующих балансов аккаунта. Файл выглядит так:

10
Helene 1000
Jordan 755
Eve 2500
Ken 80
Andrew 999
David 1743
Amy 12
Sean 98
Patrick 7
Joy 14

где 10 - количество учетных записей

import java.util.*;
import java.io.*;
import java.util.Arrays;

public class bankaccountmain {

    public static void main(String[] args) throws FileNotFoundException {
        Scanner inFile = null;
        try {
            inFile = new Scanner(new File("account.txt"));
            ;
        } catch (FileNotFoundException e) {
            System.out.println("File not found!");

            System.exit(0);
        }
        int count = 0;
        int accounts = inFile.nextInt();
        String[] names = new String[accounts];
        int[] balance = new int[accounts];
        while (inFile.hasNextInt()) {
            inFile.next();
            names[count] = inFile.next();
            inFile.nextInt();
            balance[count] = inFile.nextInt();
            count++;
        }
        System.out.println(Arrays.toString(names));
        System.out.println(Arrays.toString(balance));
    }
}
  • 0
    Что делает hasNextInt ?
Теги:
arrays
file
null

3 ответа

1
Лучший ответ

Ваша петля плохо определена.

Вы проверяете, есть ли следующий int вместо следующего токена и потребляющие строки, которые вы не собираетесь использовать.

Попробуйте это вместо цикла:

    while (inFile.hasNext()) {
        names[count] = inFile.next();
        balance[count] = inFile.nextInt();
        count++;
    }
1

Эта

int accounts = inFile.nextInt();

потребляет этот токен

10

Затем вы делаете

while (inFile.hasNextInt()) {

но следующие токены в файле:

\nHelene 1000

поэтому вызов метода будет возвращать false так как нет следующего int и цикл будет завершен.

Возможно, вам стоит проверить все линии.

1

Измените петлю следующим образом. Измените предложение while() и закомментируйте две строки.

    while (inFile.hasNext()) {
        //inFile.next();
        names[count] = inFile.next();
        //inFile.nextInt();
        balance[count] = inFile.nextInt();
        count++;
    }
  • 0
    пока меняется

Ещё вопросы

Сообщество Overcoder
Наверх
Меню