Прежде всего, насколько я знаю (и, прочитав официальную документацию Java для него здесь - https://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html), класс BufferedReader сам по себе не дает механизма (например, метод getCurrentLine ()) для определения текущей строки.
Однако ничто не мешает вам самостоятельно отслеживать текущий номер строки, скажем, через переменную счетчика.
Следовательно, соответствующий раздел вашего кода будет выглядеть следующим образом:
int currentLine = 0;
while ((line = bufferedReader.readLine()) != null) {
currentLine++;
String[] numbers = line.split(" ");
/* NOTE: this can be numbers.length >= 2 if you don't care to enforce
having exactly 2 numbers as the first line
*/
if(currentLine == 1 && numbers.length == 2) {
theMax = Integer.valueOf(numbers[0]);
theTypes = Integer.valueOf(numbers[1]);
} else {
for(int index = 0; index < numbers.length; index++) {
theSlices[index] = Integer.valueOf(numbers[index]);
}
}
}
// do something with read values
Я также хотел бы отметить, что ваш код может быть улучшен здесь и там, например:
- Вы можете заменить Ваша попытка с использованием ресурсов с попытками, так что ваши читатели управляются / закрываются автоматически, даже если возникает исключение.
- Если вы решите не использовать попытку с ресурсами, вам нужно будет переместить вызов метода reader.close () в блоке finally, потому что если действительно происходит исключение, вы никогда не закрываете свой ресурс.
- Эти 2 строки
FileReader reader = ;
BufferedReader bufferedReader = new BufferedReader(reader);
можно упростить до:
BufferedReader bufferedReader = new BufferedReader(new FileReader("INPUT1.in"));
, и тогда вам нужно только управлять экземпляром bufferedReader, если придерживаться попытки вместо попытки с ресурсами.
Надеюсь, это поможет.
PS: я не говорю, что мой фрагмент кода выше идеален, я уверен, что он может быть написан более чисто