Проблема с передачей значения в цикл - PullRequest
0 голосов
/ 01 апреля 2019

Приведенный ниже код прекрасно работает, если текстовый файл состоит из строк чисел, но как только он попадает, например, в строку с надписью «Мне 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);
            }
        }
    }

Ответы [ 3 ]

0 голосов
/ 01 апреля 2019

Я предлагаю вам использовать функцию nextInt только один раз, чтобы сохранить запрошенное значение, а затем использовать эту переменную, когда вам это нужно. Я думаю, что функция nextInt перемещается к следующему int каждый раз, когда вы обращаетесь к нему.

0 голосов
/ 01 апреля 2019

следующие

result[i] = Integer.parseInt(strOut)

приведет к NumberFormatException при попытке обработать любое письмо. Как strOut приводит к пустой строке ""

Вам нужно проверить пустую строку перед попыткой разбора

if (!strOut.isEmpty()) {
    result[i] = Integer.parseInt(strOut);
}
0 голосов
/ 01 апреля 2019

next() даст вам следующий токен, а не следующую строку. так что переменная i может идти после десяти. вы бы поняли это, если бы у вас не было пустого улова: ваш массив выходит за границы

Решение:

не использовать массив результатов, использовать список результатов и добавлять к его концу всякий раз, когда у вас есть другой результат

Примечание:

еще одно скрытое исключение, которое может возникнуть, когда ваш parseInt завершается сбоем из-за нечисловых данных. Так что не оборачивайте все в гигантскую попытку / ловлю, это только усложняет отладку!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...