#java #arrays #io
#java #массивы #io
Вопрос:
Приведенный ниже код работает отлично, если текстовый файл состоит из строк чисел, но как только он доходит, например, до строки с надписью «Мне 40», он пропускает ее вместо того, чтобы помещать 40 в массив.
Scanner inFile = null;
File file = null;
String filePath = (JOptionPane.showInputDialog("Please enter a file path"));
int size = 0;
int[] result = new int[10];
try {
file = new File(filePath);
inFile = new Scanner(file);
int skippedCounter = 0;
for(int i = 0; inFile.hasNext(); i ){
if(inFile.hasNextInt())
result[i] = inFile.nextInt();
else{
String strOut = "";
String data = inFile.next();
for(int j = 0; j <= data.length() - 1; j ){
if(!Character.isLetter(data.charAt(j))){
strOut = data.charAt(j);
}
else
skippedCounter ;
}
result[i] = Integer.parseInt(strOut);
}
}
}
Комментарии:
1. Вы пытались отладить свой код?
Ответ №1:
next()
выдаст вам следующий токен, а не следующую строку. таким образом, переменная i
может превышать десять. вы бы поняли это, если бы у вас не было пустого catch : что ваш массив выходит за пределы
решение:
не используйте результирующий массив, используйте список результатов и добавляйте в его конец всякий раз, когда у вас есть другой результат
примечание:
другое скрытое исключение, которое может возникнуть, — это сбой вашего parseInt из-за нечисловых данных. Так что не оборачивайте все в гигантскую попытку / catch, это просто усложняет отладку!
Комментарии:
1. Это сработало, но теперь у меня проблема, из-за которой, когда я печатаю свой arraylist в array, появляются пустые элементы, от которых я, похоже, не могу избавиться
Ответ №2:
Я предлагаю вам использовать функцию nextInt только один раз, чтобы сохранить запрошенное значение, а затем использовать эту переменную всякий раз, когда вам это нужно. Я думаю, что функция nextInt переходит к следующему int каждый раз, когда вы обращаетесь к ней.
Ответ №3:
Следующее
result[i] = Integer.parseInt(strOut)
приведет к NumberFormatException
при попытке обработать любую букву. Как strOut
приводит к пустой строке ""
Вам придется проверить наличие пустой строки перед попыткой синтаксического анализа
if (!strOut.isEmpty()) {
result[i] = Integer.parseInt(strOut);
}