NoSuchElementException при отправке

Я студент Comp Sci, и в моем университете есть клуб для соревнований по программированию ACM. Я только начал там, и я решаю одну из проблем. Программа работает отлично, когда я запускаю ее и не генерирует никаких исключений. Однако, когда я отправляю его на сайт, который запускает тесты и прочее, он дает мне:

В вашем приложении произошло исключение:

Исключение в потоке "main" java.util.NoSuchElementException: строка не найдена в java.util.Scanner.nextLine(Scanner.java:1585) в Main.main(Main.java:16)

Код:

import java.util.Scanner;
import java.util.ArrayList;

public class Main
{
public static void main(String[] args)
{
    Scanner inMain = new Scanner(System.in);
    ArrayList<String> a = new ArrayList<String>();

    int q = inMain.nextInt();

    for (int j = 0; j < q; j++)
    {
        Scanner read = new Scanner(System.in);
        String temp = read.nextLine();
        a.add(temp);
    }

    int r = inMain.nextInt();

    for (int h = 0; h < r; h++)
    {
        int selection = inMain.nextInt();
        if (selection < 0 || selection > q)
        {
            System.out.println("Rule " + selection + ": No such rule");
        } else
        {
            System.out.println("Rule " + selection + ": "
                    + a.get(selection - 1));
        }
    }
}

}

person Meeperz    schedule 18.11.2013    source источник
comment
Вы пытались использовать один экземпляр сканера для system.in?   -  person crownjewel82    schedule 18.11.2013
comment
Вы что-то ввели с первого nextInt()?   -  person Paul Samsotha    schedule 18.11.2013
comment
В основном это связано с тем, что вы вызываете nextInt или nextLine, когда маркер недоступен. Попробуйте этот код с несколькими входными файлами.   -  person Ankit Rustagi    schedule 18.11.2013
comment
Это не проблема программирования, просто программа ожидает ввода, отличного от того, что она предоставляет.   -  person Ankit Rustagi    schedule 18.11.2013
comment
Да, что происходит, когда я использую один экземпляр для сканера, это другое исключение. Это фактически вызывает InputMismatchException в строке 20.   -  person Meeperz    schedule 19.11.2013
comment
InputMismatchException - это потому, что вы не передали правильный ввод, скорее всего, вы передали строку вместо Int, убедитесь, что вы понимаете, что делает программа, прежде чем вводить свои входные данные   -  person JoeC    schedule 19.11.2013


Ответы (1)


Проверьте, существует ли следующая строка, прежде чем вы получите к ней доступ

for (int j = 0; j < q; j++)
{
    Scanner read = new Scanner(System.in);
    if (read.hasNextLine()){
        String temp = read.nextLine();
        a.add(temp);
    }
}
person JoeC    schedule 18.11.2013
comment
Хорошо, я добавил это, и это решило проблему, но теперь я получаю InputMismatchException в строке 23 при отправке, но я не получаю ошибку при запуске на своей машине. - person Meeperz; 19.11.2013
comment
Можете ли вы опубликовать входы? - person JoeC; 19.11.2013
comment
Если бы я знал их, я бы, наверное, смог решить эту проблему. К сожалению, у меня нет доступа к модульным тестам, которые он выполняет для кода, представленного для eval. - person Meeperz; 19.11.2013