Мне нужно предоставить отдельные заявления об исключениях.1. пустая строка и 2. допустимые числовые данные - PullRequest
0 голосов
/ 21 апреля 2011
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            System.out.println(" Enter the Amount of articles to be ordered.");
            amount = reader.readLine();

            if(amount.trim().isEmpty()){
                System.out.println("Amount Entered is Empty");
            }

            for(int count=0;count<amount.length();count++){
                if(!Character.isDigit(amount.charAt(count))){
                    throw new NumberFormatException();
                }
            }            
            order.validateAmount(amount);
        }catch(NumberFormatException numbere){
            System.out.println("Either Number format is uncorrect or String is Empty, Try Again.");
    }

Приведенный выше код дает мне один оператор println () как для исключения пустой строки, так и для исключения недопустимых числовых данных, что мне не нужно. Я хочу отдельные операторы println () для обоих исключений. как добраться?

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

Поскольку пустая строка является «ожидаемым» исключением, я бы не использовал исключение, но проверил бы его:

if ( amount.trim().equals( string.empty) )
{
   System.out.println("string empty" );
}
else
{
   //do your other processing here
}

Еще одна проверка на пустоту будет amount.trim().length == 0

Если выочень хочется использовать исключения:

if( amount.trim().equals( string.empty) )
{
   throw new IllegalArgumentException( "Amount is not given" );
}

и добавить еще один улов ()

}
catch( NumberFormatException numbere)
{
}
catch( IllegalArgumentException x )
{
  // Amount not given
}
1 голос
/ 21 апреля 2011
  1. Вы можете использовать два разных исключения , например NumberFormatException и IllegalArgumentException и сделать два разных catch -класса .

        ...
        if (amount.isEmpty())
            throw new IllegalArgumentException();
        ...
    
    } catch (NumberFormatException numbere) {
        System.out.println("Either Number format is uncorrect, Try Again.");
    } catch (IllegalArgumentException empty) {
        System.out.println("String is empty, Try Again.");
    }
    
  2. Используйте то же исключение, но с разными сообщениями :

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                System.in));
        System.out.println(" Enter the Amount of articles to be ordered.");
        String amount = reader.readLine();
    
        if (amount.trim().isEmpty()) {
            System.out.println("Amount Entered is Empty");
        }
    
        if (amount.isEmpty())
            throw new IllegalArgumentException("String is empty.");
    
    
        for (int count = 0; count < amount.length(); count++)
            if (!Character.isDigit(amount.charAt(count)))
                throw new IllegalArgumentException("Number format incorrect.");
    
        order.validateAmount(amount);
    } catch (IllegalArgumentException e) {
        System.out.println(e.getMessage() + " Try again.");
    }
    
  3. Или вы можете свернуть свои Exception с двумя разными конструкторами и флаг, указывающий, произошло ли исключение из-за неверного числа или пустой строки.

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