#java #arrays #loops
#java #массивы #циклы
Вопрос:
У меня есть текстовый файл, содержащий результаты команд по медалям, каждая строка представляет общее количество медалей команды в пяти играх, а каждый символ — медаль в одной игре:
GSGBS
SSBGG
G SB
Я использовал scanner для преобразования файла в строку:
String fileName = keyboard.nextLine();
Scanner teamMedals = new Scanner (new File (fileName));
Затем я использовал цикл while для печати медалей каждой команды:
int teamNumber = 0;
while (teamMedals.hasNext()) {
String x = teamMedals.nextLine();
teamNumber = 1;
System.out.println("Team #" teamNumber "medals: " x);
}
Я создал этот пустой двумерный массив для заполнения оценками:
int numberOfGames = 5
char [] [] teamScoresArray = new char [teamNumber][numberOfGames.length];
Мне нужно заполнить каждый элемент вложенного массива одним символом каждой команды.
таким образом, результат будет выглядеть следующим образом:
[['G','S','G','B','S'],['S','S','B','G','G'],['G',' ','S','B',' ']]
Проблема в том, что из-за наличия пустых пробелов и новых строк я продолжаю получать эту ошибку:
Исключение в потоке «main» java.lang.Исключение ArrayIndexOutOfBoundsException: 0
Комментарии:
1. Не могли бы вы поделиться еще немного своим кодом?
2. Я думаю, вы не можете использовать массивы, поскольку вы не знаете количество команд. в начале, таким образом, вы не можете создать массив нужного размера. Вы могли бы использовать ArrayList массивов
3. это приведено в начале задачи 3
4. Можете ли вы показать код, в котором вы заполняете массив?
5. Я не могу найти один
Ответ №1:
Не используйте Scanner
для простого чтения строк текстового файла. Используйте BufferedReader
для повышения производительности.
char[][] array;
try (BufferedReader in = new BufferedReader(new FileReader(fileName))) {
List<char[]> list = new ArrayList<>();
for (String line; (line = in.readLine()) != null; )
list.add(line.toCharArray());
array = list.toArray(new char[list.size()][]);
}
А еще лучше, используйте Files.lines(Path path)
потоковую обработку (Java 8 ):
char[][] array = Files.lines(Paths.get(fileName))
.map(String::toCharArray)
.toArray(char[][]::new);
Вывод
System.out.println(Arrays.deepToString(array));
[[G, S, G, B, S], [S, S, B, G, G], [G, , S, B, ]]