2015-11-10 4 views
0

Я столкнулся с этой проблемой при чтении информации из файла. Поэтому у меня есть этот текстовый файл с целыми числами, которые я хочу прочитать и добавить в свой ArrayList. Моя проблема заключается в том, что сканер, кажется, только читает первые 2 строки вместо всего файла.чтение информации с помощью сканера из текстового файла

Мой Текстовый файл:

6 
0 4 10 0 0 2 
4 0 5 0 0 7 
10 5 0 4 0 0 
0 0 4 0 3 8 
0 0 0 3 0 6 
2 7 0 8 6 0 
2 5 

И это мой код:

FileReader reader = new FileReader(inputFileName); 
Scanner in = new Scanner(reader); 

// read in the data here 
while(in.hasNextLine()){ 
    if(in.hasNextInt()) 
     alist.add(in.nextInt()); 
    in.nextLine(); 
} 

Это мой выход: 6 0 4 10 0 0 2 2

Надеюсь кто-нибудь может мне с этим. Я пробовал хранить все в строке и читать оттуда, но у меня все получилось в виде одиночных цифр.

ответ

1

Вы должны попробовать это, чтобы прочитать все целые числа

while(in.hasNextInt()){ 
    alist.add(in.nextInt()); 
} 

Когда вы говорите in.nextLine(); в коде он получит новую строку. Поэтому в следующей итерации он будет сканировать только первое целое число в строке. Но с пара получит целые числа, пропуская пробелы (пробел и новые строки) и остановится, когда достигнет конца файла.

+0

Не могу поверить, как я глупо звучу, задавая этот вопрос. Но спасибо большое! – Bocky

0

Попробуйте это:

FileReader reader = new FileReader(inputFileName); 
Scanner in = new Scanner(reader); 

// read in the data here 
while(in.hasNext()){ 
    alist.add(in.nextInt()); 
} 

Вы имели проблемы из-за in.nextLine();, что вы назвали в конце цикла. Это вызовет следующую строку, которая заставит вас пропустить строки.

1

На самом деле вы читаете первое целое число каждой строки, потому что вы выполняете цикл по строкам, но не по их содержимому: вы просто проверяете, является ли первый токен на линии int, читайте его и переходите к следующая строка.

0
if(in.hasNextInt()) 
    alist.add(in.nextInt()); 

Заменить

while(in.hasNextInt()) 
{ 
    alist.add(in.nextInt()); 
} 

Поскольку вы читаете Int из каждой строки только один раз.

Смежные вопросы