• ,

level09.lesson08.task03;

Не понимаю, какой из пунктов я не выполнил / выполнил не правильно?

/* Перехват выборочных исключений
1. Разберись, какие исключения бросает метод BEAN.methodThrowExceptions.
2. Метод processExceptions должен вызывать метод BEAN.methodThrowExceptions и обрабатывать исключения:
2.1. если возникло исключение FileSystemException, то логировать его (вызвать метод BEAN.log) и пробросить дальше
2.2. если возникло исключение CharConversionException или любое другое IOException, то только логировать его - вызвать метод BEAN.log
3. Добавь в сигнатуру метода processExceptions класс исключения, которое ты пробрасываешь в п.2.1.
4. В методе main обработай оставшееся исключение - логируй его. Используй try..catch

Подсказка:
Если ты захватил исключение MyException, которое не хотел захватывать, его можно пробросить дальше кодом вида:
catch (MyException e) {
throw e;
}
*/

public class Solution {
    public static StatelessBean BEAN = new StatelessBean();

    public static void main(String[] args) {
        try{
            processExceptions();
        }
        catch (IOException e){
            BEAN.log(e);
        }
    }

    public static void processExceptions()throws FileSystemException, IOException {
        try{
            BEAN.methodThrowExceptions();
        }
        catch (FileSystemException e){
            BEAN.log(e);
            throw  e;
        }
        catch (CharConversionException e){
            BEAN.log(e);
        }
    }

    public static class StatelessBean {
        public void log(Exception exception) {
            System.out.println(exception.getMessage() + ", " + exception.getClass().getSimpleName());
        }

        public void methodThrowExceptions() throws CharConversionException, FileSystemException, IOException {
            int i = (int) (Math.random() * 3);
            if (i == 0)
                throw new CharConversionException();
            if (i == 1)
                throw new FileSystemException("");
            if (i == 2)
                throw new IOException();
        }
    }
}

46 комментариев

SoulsHunter
этот пункт 2.2. если возникло исключение CharConversionException или любое другое IOException
LokiMora
Так программа перехватывает CharConversionException исключения или имелось ввиду, что нужно написать catch (IOException e)? Даже если и поменять, то все равно не проходит
SoulsHunter
тут лишнее: public static void processExceptions()throws FileSystemException, IOException
а в main не то ловит
SoulsHunter
просто нужно внимательно читать задание и точнее выполнять
LokiMora
Спасибо, все заработало.
Не сразу понял, как работает проброс вот и ставил его где попало, теперь разобрался.
Andre_1991
у меня почти такой же код, только
public static void processExceptions()   throws IOException 

компилируется но не тестируется.
Andre_1991
какое именно у тебя как попало стояло?
Andre_1991
т.е прям в методе processExceptions() его залогировать?
SoulsHunter
а взять да попробовать сделать без вопросов?
Motorheadbanger
java: class StatelessBean is public, should be declared in a file named StatelessBean.java

Вот такая ошибка. Что делать?
Braidner
Скорее всего указали класс StatelessBean вне класса Solution;
DimaSan
в этом задании у меня IDE подчеркивает слово file в
import java.nio.file.FileSystemException;
соответственно, не может импртировать данный класс и везде в коде не распознает его. У кого-то еще встречалась такая ошибка?
Timur
JDK 7-ой версии?
DimaSan
jdk1.6.0_45 наверное 6?
Timur
Да вот и причина.
Since:
1.7
Timur
Q: Какие требования к компьютеру и софту, чтобы начать пользоваться JavaRush?
A: Windows, Silverlight, jdk-1.7, Intellij Idea 11.5+
info.javarush.ru/page/FAQ/
DimaSan
спасибо большое, ребята!
DimaSan
а подскажите еще пожалуйста, верно ли я бросаю исключения в сигнатере метода?
public void methodThrowExceptions() throws CharConversionException, FileSystemException, IOException {

не перехватывает ли IOException два других исключения?
остальные методы выглядят так:
public static void processExceptions() throws FileSystemException {

public static void main(String[] args) throws FileSystemException {
hubert
Предлагаю тебе самому изучить этот вопрос)
DimaSan
спасибо, так и сделал и решение прошло тест))
Munch
  • Munch
  • 0
  • Комментарий отредактирован 2014-02-25 14:43:36 пользователем Munch
вопрос решен перепрочитыванием условия
darkstone
ну сразу п.4 не выполнен
Quadol
  • Quadol
  • 0
  • Комментарий отредактирован 2014-04-05 11:47:35 пользователем Quadol
Программа не проходит тестирования, хотя все выполняется. Все сделал по пунктам.
Код:
package com.javarush.test.level09.lesson08.task03;

import java.io.CharConversionException;
import java.io.IOException;
import java.nio.file.FileSystemException;

/* Перехват выборочных исключений
1. Разберись, какие исключения бросает метод BEAN.methodThrowExceptions.
2. Метод processExceptions должен вызывать метод BEAN.methodThrowExceptions и обрабатывать исключения:
2.1. если возникло исключение FileSystemException, то логировать его (вызвать метод BEAN.log) и пробросить дальше
2.2. если возникло исключение CharConversionException или любое другое IOException, то только логировать его - вызвать метод BEAN.log
3. Добавь в сигнатуру метода processExceptions класс исключения, которое ты пробрасываешь в п.2.1.
4. В методе main обработай оставшееся исключение - логируй его. Используй try..catch

Подсказка:
Если ты захватил исключение MyException, которое не хотел захватывать, его можно пробросить дальше кодом вида:
catch (MyException e) {
throw e;
}
*/

public class Solution {
    public static StatelessBean BEAN = new StatelessBean();

    public static void main(String[] args) throws IOException
    {
        try
        {
            processExceptions();
        }
        catch (Exception e)
        {
            BEAN.log(e);
        }
    }

    public static void processExceptions() throws IOException
    {
        try
        {
            BEAN.methodThrowExceptions();
        }
        catch (FileSystemException e)
        {
            BEAN.log(e);
            throw e;
        }
        catch (IOException e)
        {
            BEAN.log(e);
        }
        class FileSystemException{}



    }

    public static class StatelessBean {
        public void log(Exception exception) {
            System.out.println(exception.getMessage() + ", " + exception.getClass().getSimpleName());
        }

        public void methodThrowExceptions() throws CharConversionException, FileSystemException, IOException {
            int i = (int) (Math.random() * 3);
            if (i == 0)
                throw new CharConversionException();
            if (i == 1)
                throw new FileSystemException("");
            if (i == 2)
                throw new IOException();
        }
    }
}
В чем моя ошибка?
Quadol
Понял, что пункт 3 выполнил не правильно и добавил заместо throws IOException throws FileSystemException, но программа все равно не проходит.
Quadol
Новый код:
package com.javarush.test.level09.lesson08.task03;

import java.io.CharConversionException;
import java.io.IOException;
import java.nio.file.FileSystemException;

/* Перехват выборочных исключений
1. Разберись, какие исключения бросает метод BEAN.methodThrowExceptions.
2. Метод processExceptions должен вызывать метод BEAN.methodThrowExceptions и обрабатывать исключения:
2.1. если возникло исключение FileSystemException, то логировать его (вызвать метод BEAN.log) и пробросить дальше
2.2. если возникло исключение CharConversionException или любое другое IOException, то только логировать его - вызвать метод BEAN.log
3. Добавь в сигнатуру метода processExceptions класс исключения, которое ты пробрасываешь в п.2.1.
4. В методе main обработай оставшееся исключение - логируй его. Используй try..catch

Подсказка:
Если ты захватил исключение MyException, которое не хотел захватывать, его можно пробросить дальше кодом вида:
catch (MyException e) {
throw e;
}
*/

public class Solution {
    public static StatelessBean BEAN = new StatelessBean();

    public static void main(String[] args) throws IOException
    {
        try
        {
            processExceptions();
        }
        catch (Exception e)
        {
            BEAN.log(e);
        }
    }

    public static void processExceptions() throws FileSystemException
    {
        try
        {
            BEAN.methodThrowExceptions();
        }
        catch (FileSystemException e)
        {
            BEAN.log(e);
            throw e;
        }
                catch (CharConversionException e)
        {
            BEAN.log(e);
        }
        catch (IOException e)
        {
            BEAN.log(e);
        }

    }

    public static class StatelessBean {
        public void log(Exception exception) {
            System.out.println(exception.getMessage() + ", " + exception.getClass().getSimpleName());
        }

        public void methodThrowExceptions() throws CharConversionException, FileSystemException, IOException {
            int i = (int) (Math.random() * 3);
            if (i == 0)
                throw new CharConversionException();
            if (i == 1)
                throw new FileSystemException("");
            if (i == 2)
                throw new IOException();
        }
    }
}
Quadol
Вроде, все пункты соблюдены, но тест не проходит. Хотя, у меня пункт 5 под сомнением.
hubert
Ты сам с собой общаешься? Пункт 4 не выполнен
Quadol
Я всего лишь обновлял ветку новой информацией. Спасибо за наводку.
Quadol
В методе «processExceptions» обрабатываются все возникающие исключения. Так что же обрабатывать в main?
Quadol
Понял, что из-за проброса исключение возникнет уже в main. Я его поймал, но тест все равно не проходит.
igor
а 5ый пункт это какой?
Quadol
Ошибся) 4-ый пункт.
Quadol
Все решил.
alchimik
  • alchimik
  • 0
  • Комментарий отредактирован 2014-10-29 00:38:01 пользователем alchimik
package com.javarush.test.level09.lesson08.task03;

import java.io.CharConversionException;
import java.io.IOException;
import java.nio.file.FileSystem;
import java.nio.file.FileSystemException;

/* Перехват выборочных исключений
1. Разберись, какие исключения бросает метод BEAN.methodThrowExceptions.
2. Метод processExceptions должен вызывать метод BEAN.methodThrowExceptions и обрабатывать исключения:
2.1. если возникло исключение FileSystemException, то логировать его (вызвать метод BEAN.log) и пробросить дальше
2.2. если возникло исключение CharConversionException или любое другое IOException, то только логировать его - вызвать метод BEAN.log
3. Добавь в сигнатуру метода processExceptions класс исключения, которое ты пробрасываешь в п.2.1.
4. В методе main обработай оставшееся исключение - логируй его. Используй try..catch

Подсказка:
Если ты захватил исключение MyException, которое не хотел захватывать, его можно пробросить дальше кодом вида:
catch (MyException e) {
throw e;
}
*/

public class Solution {
    public static StatelessBean BEAN = new StatelessBean();

    public static void main(String[] args) throws Exception{

        try {

            processExceptions();
        }
        catch (Exception e){
            BEAN.log(e);
        }
    }

    public static void processExceptions() throws FileSystemException{

        try {
            BEAN.methodThrowExceptions();
        }
        catch (FileSystemException e){
             BEAN.log(e);
            throw e;
        }
        catch (CharConversionException e){
            BEAN.log(e);
        }
        catch (IOException e){
            BEAN.log(e);
        }
    }

    public static class StatelessBean {
        public void log(Exception exception) {
            System.out.println(exception.getMessage() + ", " + exception.getClass().getSimpleName());
        }

        public void methodThrowExceptions() throws CharConversionException, FileSystemException, IOException {
            int i = (int) (Math.random() * 3);
            if (i == 0)
                throw new CharConversionException();
            if (i == 1)
                throw new FileSystemException("");
            if (i == 2)
                throw new IOException();
        }
    }
}

Подскажите, что не так, компилируется, работает но тест не проходит.
Takheer
Написал решение, не проходит тест. Нашел решение: принципиальных отличий нет, но мой не проходит. Та же ситуация.
Uloff
Последние два импорта попробуй убрать
Naissur
А зачем в сигнатуре метода main все указывают throws Exception, если метод main не пробрасывает никаких исключений?
igor
кто все?
Naissur
Комментаторы выше.
vAndrey
Кстати, читал, что в сигнатуру метода не входят исключения, что меня запутало несколько в задаче.
Всё же входят исключения в сигнатуру или тут в условии допущено упрощение?
Naissur
Цитата из официального туториала от Oracle:
Two of the components of a method declaration comprise the method signature—the method's name and the parameter types.
Т.е. бросаемые исключения не входят в сигнатуру.
Koala
Мое решение, вдруг кому поможет, тестирование прошло успешно
import java.io.CharConversionException;
import java.io.IOException;
import java.nio.file.FileSystemException;

/* Перехват выборочных исключений
1. Разберись, какие исключения бросает метод BEAN.methodThrowExceptions.
2. Метод processExceptions должен вызывать метод BEAN.methodThrowExceptions и обрабатывать исключения:
2.1. если возникло исключение FileSystemException, то логировать его (вызвать метод BEAN.log) и пробросить дальше
2.2. если возникло исключение CharConversionException или любое другое IOException, то только логировать его - вызвать метод BEAN.log
3. Добавь в сигнатуру метода processExceptions класс исключения, которое ты пробрасываешь в п.2.1.
4. В методе main обработай оставшееся исключение - логируй его. Используй try..catch

Подсказка:
Если ты захватил исключение MyException, которое не хотел захватывать, его можно пробросить дальше кодом вида:
catch (MyException e) {
throw e;
}
*/

public class Solution {

    public static StatelessBean BEAN = new StatelessBean();

    public static void main(String[] args) {
        try
        {
            processExceptions();
        }
        catch (Exception e)
        {
            BEAN.log(e);
        }
    }

    public static void processExceptions() throws FileSystemException
    {
        try
        {
            BEAN.methodThrowExceptions();
        }
        catch (FileSystemException e)
        {
            BEAN.log(e);
            throw e;
        }
        catch (Exception e)
        {
            BEAN.log(e);
        }

    }

    public static class StatelessBean
    {
        public void log(Exception exception)
        {
            System.out.println(exception.getMessage() + ", " + exception.getClass().getSimpleName());
        }

        public void methodThrowExceptions() throws CharConversionException, FileSystemException, IOException
        {
            int i = (int) (Math.random() * 3);
            if (i == 0)
                throw new CharConversionException();
            if (i == 1)
                throw new FileSystemException("");
            if (i == 2)
                throw new IOException();
        }
    }
}
arsen-azizov
  • arsen-azizov
  • 0
  • Комментарий отредактирован 2016-09-22 09:32:53 пользователем arsen-azizov
Помогите пожалуйста, пишет, что не компилируется на сервере, хотя у меня все компилируется, и работает, не пойму в чем проблема

<code>public class Solution {
    public static StatelessBean BEAN = new StatelessBean();

    public static void main(String[] args)
    {
        try
        {
            processExceptions();
        }
        catch (FileSystemException e)
        {
            BEAN.log(e);
        }
    }

    public static void processExceptions() throws FileSystemException
    {
        try
        {
            BEAN.methodThrowExceptions();
        }
        catch (CharConversionException e)
        {
            BEAN.log(e);
        }
        catch (FileSystemException e)
        {
            BEAN.log(e);
            throw e;
        }
        catch (IOException e)
        {
            BEAN.log(e);
        }
    }

    public static class StatelessBean {
        public void log(Exception exception) {
            System.out.println(exception.getMessage() + ", " + exception.getClass().getSimpleName());
        }

        public void methodThrowExceptions() throws CharConversionException, FileSystemException, IOException {
            int i = (int) (Math.random() * 3);
            if (i == 0)
                throw new CharConversionException();
            if (i == 1)
                throw new FileSystemException("");
            if (i == 2)
                throw new IOException();
        }
    }
}
</code>
arsen-azizov
а, все, проблема решилась, были импортированы левые библиотеки
sergey_b
Решил сам с третьей попытки, без подсказок, но вообще не понял что сделал. Как-то само получилось.

public class Solution {
    public static StatelessBean BEAN = new StatelessBean();

    public static void main(String[] args) throws Exception {

        try {
            processExceptions();
        }
        catch (Exception e)
        {
            BEAN.log(e);
        }

    }

    public static void processExceptions() throws FileSystemException
    {
        try {
            BEAN.methodThrowExceptions();
        }
        catch (FileSystemException e)
        {
            BEAN.log(e);
            throw e;
        }
        catch (CharConversionException e)
        {
            BEAN.log(e);
        }
        catch (Exception e)
        {
            BEAN.log(e);
        }
    }

    public static class StatelessBean {
        public void log(Exception exception) {
            System.out.println(exception.getMessage() + ", " + exception.getClass().getSimpleName());
        }

        public void methodThrowExceptions() throws CharConversionException, FileSystemException, IOException {
            int i = (int) (Math.random() * 3);
            if (i == 0)
                throw new CharConversionException();
            if (i == 1)
                throw new FileSystemException("");
            if (i == 2)
                throw new IOException();
        }
    }
}
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.