2014-01-29 4 views
0

Я пытаюсь прочитать txt-файл. Я продолжаю получать ошибку «нет такого элемента», и я не могу понять, почему. Мой код:Отсутствие исключения такого элемента при использовании сканера

File myFile = new File(input.txt) 
Scanner reader = new Scanner(myFile); 

for (int i = 0; i<20; i++) 
{ 
    name[i] = reader.nextLine(); 
    grade[i] = reader.nextInt(); 
    reader.nextLine(); 
    rank[i] = reader.nextInt(); 
    reader.nextLine(); 
} 
reader.close(); 

Адрес example of the file format. Что мне не хватает?

+0

Что такое определение '' name', grade' и 'rank'? – Naetmul

+3

Возможно, потому, что вы пытаетесь прочитать 20 имен, классов и рангов из файла, который содержит только три из них? –

ответ

3

Именно поэтому использование цикла for - плохая идея при чтении из файла; вы не знаете (скорее, вы не должны заботиться о большинстве намерений и целей), насколько велик ваш файл.

Переключить его для while цикла:

while(reader.hasNext()) { 
    // code 
} 

(Не забудьте заранее i в петле.)

При условии, что ваши лексемы разделены на точные кратные трем, этого будет читать токены, не исчерпывая материал для чтения.

+0

, так что следующая проблема заключается в том, что я делаю это, у меня есть много места для элементов, которые будут добавлены позже в массивы, так что как много места, но не распечатайте пустые места. – user3247053

+0

Звучит как другой вопрос для меня. Из звуков этого, однако, вы хотите перебрать элементы в массиве, и если это не пусто, напечатайте что-нибудь. – Makoto

+0

Возможно, вам следует использовать 'ArrayList', который автоматически вырастет. –

1

Определенно не очень хороший выбор для использования for петля.

Вы можете попробовать что-то вроде этого:

int i=0; 
int i1=0; 
int i2=0; 
int i3=0; 

while(reader.hasNextLine()) { 
    i++; 
    if(i==1){ 
     name[i1]=reader.nextLine(); 
     i1++; 
    } 
    if(i==2){ 
     grade[i2]=Integer.valueOf(reader.nextLine()); 
     i2++; 
    } 
    if(i==3){ 
     rank[i3]=Integer.valueOf(reader.nextLine()); 
     i3++; 
     i=0; 
    } 
} 
Смежные вопросы