Не могу выбросить новый класс исключения - PullRequest
0 голосов
/ 07 февраля 2020

Программа должна прочитать файл, добавить значение и вывести среднее значение. Тем не менее, в случае ошибки, вызванной неправильным типом данных (например, «23 24 82 f 13 5»), он должен использовать try и catch, чтобы предотвратить сбой программы и отобразить пользователю сообщение типа «Ошибка! Неверные данные». тип найден в файле. Система читает: f. " Я попытался найти на YouTube эту конкретную проблему, а также скопировал то, что делал в последнем задании. Я на самом деле не знаю ключевое слово для этой проблемы, поэтому пока не повезло.

Ниже приведен код одного из моих классов:

/**Method to sum numbers inside file with exception in case the system reads something other than numerical value*/
public double  getSum() {
    try{
        while(sc.hasNext()) {
            sum = sum + sc.nextDouble();
            System.out.print("Sum is: " + sum);
        }

    }catch(IllegalDataRead e) {
        throw new IllegalDataRead("Can't add value! System reads: ", sc.nextByte());
    }
    return sum;
}

Ниже будет приведен конструктор для класс пользовательских исключений:

/**Constructor for wrong data type read*/
public IllegalDataRead(String message, byte b) {
    super(message + " " + b);
}

Вот моя консоль:

Введите имя файла или каталог, в котором находится файл: Numbers.txt Сумма: 34.0 Исключение в потоке "main" java .util.InputMismatchException: невозможно добавить значение! at lab05.Number.getSum (Number. java: 34) на lab05.MainClass.main (MainClass. java: 23) Сумма равна: 68.0 Сумма равна: 122.0 Сумма равна: 136.0 Сумма равна: 168.0Сумма: 192.0

1 Ответ

0 голосов
/ 07 февраля 2020

Все значения являются целыми числами, поэтому я бы предложил использовать int (вместо double). Используйте Scanner.hasNextInt(), прежде чем пытаться использовать следующее значение int, и не забывайте потреблять все, что не является int. Я бы не стал print ничего о текущей сумме в getSum() - отдельные проблемы. Что-то вроде

private static final String _MSG = "Error! Wrong data type found in file. "
        + "System reads: %s.%n";
public int getSum() {
    int sum = 0;
    while (sc.hasNext()) {
        if (sc.hasNextInt()) {
            sum += sc.nextInt();
        } else {
            System.err.printf(msg, sc.next());
        }
    }
    return sum;
}

Если он должен поддерживать число с плавающей запятой, тогда используйте hasNextDouble() вроде

public double getSum() {
    double sum = 0;
    while (sc.hasNext()) {
        if (sc.hasNextDouble()) {
            sum += sc.nextDouble();
        } else {
            System.err.printf(msg, sc.next());
        }
    }
    return sum;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...