2015-09-13 2 views
3

Я пишу программу, которая берет информацию о соревновании по легкой атлетике, а затем выполняет некоторые вычисления с ней. Проблема, с которой я сейчас сталкиваюсь, только в первом разделе ввода пользователя.Code Behavior Differently On Different IDE

Впервые я написал свой код в BlueJ, и он отлично работал. Затем я попытался скомпилировать его в JCreator и начал получать эту ошибку, когда программа получала только 3 пользовательских ввода, прежде чем перейти к следующему фрагменту кода, когда он должен был получить 5 (что было сделано при компиляции в BlueJ).

Когда я разместил оператор System.out.println после ввода инструкции, программа (в JCreator) DID принимает все 5 операторов перед продолжением. Когда я снова прокомментировал это, он только получил 3 заявления, прежде чем продолжить. Вот код ниже.

String[] events = new String[5]; 

    System.out.println("Please enter the 5 events in this competition."); 
    for(int i = 0; i < events.length; i++) 
    { 
     events[i] = input.nextLine(); 
     System.out.println(i); 
    } 

Это результат работы с оператором System.out.println.

enter image description here

Это выход с System.out.println заявления закомментированного.

enter image description here

+0

Что происходит, когда вы меняете 'events' на' String [6] '? или 7? 8? 9? Я предполагаю, что шаблон появится там, где вы получите что-то близкое к n/2 входам. –

+0

Попробуйте добавить следующее после кода, опубликованного в вопросе, и сообщить нам, что вы видите: 'for (int i = 0; i

+0

Это выход: 100m тир 20ого тир 30ого тир 0100m тир 2200m тир 430ого тира –

ответ

2

Изменения линия

events[i] = input.nextLine(); 

в

String newLine; 
while((newLine = input.nextLine()).isEmpty()); 
events[i] = newLine; 

Это должно потреблять дополнительные новых строку символов и оставить вам только законный вход в events.

+1

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

1

Возможная причина вашей проблемы новой строки символов, которые интерпретируются как линии. Кажется, у вас есть дополнительные символы новой строки в вашем буфере ввода.

Вы можете проверить свою IDE, какой символ предоставляется при нажатии клавиши ввода.

Возможно, вы используете Сканер класс для чтения ввода. Вы можете попытаться обернуть свой System.in с помощью InputStreamReader, который может помочь. (Не уверен, попробовать его)

Scanner input = new Scanner(new InputStreamReader(System.in)); events[i]=input.nextLine();

Вместо этого, вы можете также попытаться использовать BufferedReader читать вход.

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); events[i]=reader.readLine();

Надеется, что это поможет !!

+0

К сожалению, ни один из них не работал. Спасибо за попытку! –

+0

Я считаю, что диагноз правильный: это ** символ новой строки **. Что делать? –