KseNya

ответов-1 / помог0

Предусмотреть обработку исключений и реализовать собственные

1680043482
Есть задание: предусмотреть обработку исключений, возникающих при нехватке памяти, отсутствии требуемой записи (обьекта) в файле, недопустимом значении поля и т. д. Реализуйте собственные обработчики исключений и исключения ввода/вывода. Я не понимаю как реализовать эти исключения(нехватка памяти, отсутствии записи в файле (мне кажется это не требуется, т.к. здесь я не работала с файлами) и недопустимое значение). А так же я даже не знаю какие здесь можно добавить свои обработчики исключений. Я думала на счёт того чтобы, например, в методе Search нельзя было вводить отрицательные числа, но у меня как-то не получается это сделать. Вот часть моей программы, для которой,как мне кажется, можно было бы сделать исключения, т.к. в остальной части нет ничего значимого для чего можно сделать исключения:

import java.util.Scanner;
 
import java.util.ArrayList;
 
public class BagajVagon extends Vagon {
 
    private int komfort = 0; // значение комфортности
 
    public BagajVagon() {
 
    }
 
    public BagajVagon(int number, String type, int komfort, int kolvo_bagaja) {
        super(number, type, komfort, kolvo_bagaja);
 
        System.out.println("Вагон №" + getNumber() + "\n " + " тип= " + getType() + "; " + " количество багажа= "
                + getKolvo_bagaja() + "; " + " ");
    }
 
    public int getKomfort() {
        return komfort;
    }
 
    public void setKomfort(int komfort) {
        this.komfort = komfort;
    }
 
    public String Out(ArrayList<PassVagon> A) {
 
        String out_passvagon = "";
        for (int i = 0; i < A.size(); i++) {
            out_passvagon = out_passvagon + A.get(i).toString();
        }
        return out_passvagon;
    }
    Scanner sc = new Scanner(System.in);
    
    public void Search(ArrayList<PassVagon> A){
        System.out.println("Введите чило a: ");
        int kol_a = sc.nextInt();
    
        System.out.println("Введите чило b: ");
        int kol_b = sc.nextInt();
        
 
        System.out.println("От "+ kol_a + " до "+ kol_b);
        for (int i = 0; i < A.size(); i++) {
            if(A.get(i).getKolvo_pass()>= kol_a && (A.get(i).getKolvo_pass() <= kol_b)){
                System.out.print(A.get(i).toString());
            }
        }
    }
 
}
Если бы вы могли мне помочь, была бы очень благодарна.
IOException
ответов1 / помог1
1680047978
для начала несколько маленьких замечаний

public String Out(ArrayList<PassVagon> A)
конечно вы можете обозначать метод с большой буквы, однако в яве так не принято, считается плохим стилем. Хотя бы потому что легко спутать с классами, которые принято писать с большой буквы. Все методы а так же переменные следует писать начиная с маленькой буквы и в формате "camel case", напр. doSomething(). Я бы посоветовал ознакомиться с т.н. Java Code Conventions и с самого начала привыкать к общепринятому профессиональному стилю. https://www.oracle.com/technetwork/java/codeconventions-150003.pdf Если вы пишете код как попало, не придерживаясь конвенций это сразу кидается в глаза и выглядит не профессионально. С таким стилем вы вряд ли произведете положительное впечатление на потенциального работодателя. За то если вы заведете привычку писать код в общепринятом стиле то и доценты которые будут его читать совершенно по другому будут к вам относится. далее. Вы создаете новый объект сканнера прямо в вашем классе

Scanner sc = new Scanner(System.in);
вот это я бы вам не советовал делать. Либо поместите этот объект в метод где вы им пользуетесь, либо сделайте его static, либо наилучшим вариантом будет вообще использовать только один static сканер везде где потребуется. сделайте отдельный класс

public class ConsoleApplication {
    
     public static Scanner in = new Scanner(System.in);
}
и потом можете из метода любого другого класса пользоваться им так.

int number = ConsoleApplication.in.nextInt();
KseNya, «предусмотреть обработку исключений» ну для начала

 try {
            // команды которые могут кинуть некие исключения
        } catch(OutOfMemoryError e) {
            System.out.println("Упс! закончилась память! :-(");
        } catch (Exception e) {
            // что будем делать если возникло любое другое исключение
            System.out.println("Что то пошло не так!");
        }
        finally {
            // что будем делать в любом случае по заключению
            // не зависимо от того поймали ли мы исключение или нет.
            // этот блок является опциональным и используется как
            // правило для закрытия открытых ресурсов, например файлов.
            // потому что мы по любому хотим сни файл локи, не зависимо
            // от того упало что то при чтении или нет.
        }
«Реализуйте собственные обработчики исключений и исключения ввода/вывода.» откровенно говоря я не совсем понимаю что тут подразумевается под исключением ввода/вывода. Однако может это поможет понять как делаются собственные исключения в принципе. Существует два типа исключений. Просто исключение (Exception) и т.н. исключение во время выполнения (RuntimeException) Разница лишь в том что обычные требуют чтобы методы которые их кидали обязательно были обработаны и находились в try catch блоке. То есть если у вас метод кидает обычное исключение уже на уровне редактирования кода IntelliJ вам укажет что следует обрабатывать исключение и какое именно. Вы не сможете компилировать код не поместив метод которое кидает обычное исключение в try catch. Таким например является IOException. RuntimeException однако не требует такой проверке. Оно может возникнуть при выполнении. Таким например является NullPointerException. Далее пример простого собственного RuntimeException

public class NotAPositiveNumberException extends RuntimeException {
 
    private final static String DEFAULT_MESSAGE = "Обранужено позитивное число";
 
    public NotAPositiveNumberException() {
        super(DEFAULT_MESSAGE);
    }
 
    public NotAPositiveNumberException(Throwable cause) {
        super(DEFAULT_MESSAGE, cause);
    }
}

public class CustomExceptionDemo {
 
    final private static Scanner in = new Scanner(System.in);
 
    public static void main(String[] args) {
 
        System.out.println("Введите негативное число.");
        try {
            Long pN = readPositiveNumber();
        } catch (NotAPositiveNumberException e) {
            System.out.println(e.getMessage());
        } catch (InputMismatchException e) {
            System.out.println("Вы задали не число а что то другое.");
        }
 
 
    }
 
    public static Long readPositiveNumber() {
        Long n = in.nextLong();
        if(n < 0) throw new NotAPositiveNumberException();
        return n;
    }
}
обратите внимание, в методе main мы его всё же пытаемся пой поместив метод который его может кинуть в try catch блок. Однако т.к. это RuntimeException её не обязательно обрабатывать. Если вы не поместите вызов метода readPositivNumber в try catch компайлер вас не предупредит что такое исключение может произойти. Если же оно произойдет то программа просто остановиться и выдаст вам исключение и весь стэктрейс на экран. Но мы же хотим не просто выдать стектрейс и позволить программе просто вылететь, а мы хотим может напечатать только текст ошибки и выйти из программы в контролированном порядке. По этому ловим и обрабатываем.
KseNyaвлепить жирный лайк
KseNya
ответов-1 / помог0
1680048089
IOException, как всегда спасибо) все замечания учту
влепить жирный лайк
Сначала вход
A B i U S JS PHP HTML CSS SQL C C++ C# PYTHON JAVA
Для входа только имэйл или имя и апроль
Можно сменить аватар
Имэйл Ваше имя
Пароль