2015-01-27 3 views
0

Я довольно новичок во всем этом, но я практикуюсь на мероприятии UIC Texas Computer Science, и я работаю над проблемой практики, но я столкнулся с этой ошибкой.Java NoSuchElementException on nextInt

Exception in thread "main" java.util.NoSuchElementException 
    at java.util.Scanner.throwFor(Unknown Source) 
    at java.util.Scanner.next(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at bridge.bridge.main(bridge.java:28) 

Вот мой код. Я честно понятия не имею, что с ним не так, как ужасно смотреть.

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

public class bridge { 

public static void main(String[] args) throws IOException { 
    Scanner input = new Scanner(new File("bridge.dat")); 
    int convoys = input.nextInt(); 
    int vehicles; 
    int weight = 0; 
    int speed = 0; 
    int speedholder; 
    int checker = 0; 
    boolean placeholder = true; 
    for(int i = 0; i < convoys; i++){ 
     vehicles = input.nextInt(); 
     for(int y = 0; y < vehicles; y++) { 
      if(!placeholder) { 
       placeholder = true; 
       weight += checker; 
       speedholder = input.nextInt(); 
       if(speedholder < speed || speed == 0) { 
        speed = speedholder; 
       } 
      } 
      else { 
       checker = input.nextInt(); 
       if(weight + checker > 42) { 
        placeholder = false; 
       } 
       else { 
        weight += checker; 
        speedholder = input.nextInt(); 
        if(speedholder < speed || speed == 0) { 
         speed = speedholder; 
        } 
       } 
      } 
     } 
     System.out.println(speed); 
     speed = 0; 
     weight = 0; 
    } 
    input.close(); 
} 
} 

распечатывает «5» перед выдачей ошибки. И вот как выглядит мой входной файл:

2 
8 
10 10 
5 25 
40 5 
35 15 
12 23 
30 20 
42 25 
8 30 
10 
42 10 
23 30 
40 5 
2 10 
1 20 
4 30 
6 28 
28 3 
17 8 
35 10 

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

+0

исправьте свой заголовок с помощью правильного верблюжьего шкафа – Coffee

+2

с помощью 'hasNextInt()' перед вызовом 'nextInt()'. И всякий раз, когда вы сомневаетесь, проверьте [документацию] (http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextInt()) – Baby

+0

Вы, кажется, пропустите чтение " транспортных средств "для каждого автомобиля, вы ДОЛЖНЫ читать два' int ', но вы читаете только один ... – MadProgrammer

ответ

1

Когда Scanner выбрасывает NoSuchElementException, это означает, что вы пытаетесь прочитать со сканера после того, как вы достигли конца ввода.

Если вы хотите узнать, находитесь ли вы в конце ввода, вы можете использовать hasNextInt.

Идите оттуда.

+0

Мнение: рассмотрим цикл while 'while (input.hasNextInt())' вы на самом деле не ссылаетесь на 'i', и эти методы больше итератора, чем массива. Ответ выше, скорее всего, это! –

+0

Да, это то, что я обычно делал бы, но способ форматирования входного файла и того, как написана программа, должен сделать этот процесс ненужным. –