Почему это исключение недопустимого символа не разрешается в тип?

Для задания я должен ввести строку и перевернуть ее, выбрасывая исключение недопустимого символа, если символ в строке не является буквой, цифрой или пробелом. Мой профессор говорит, что не нужны никакие пункты броска метода.

Вот мой код

import java.util.*;
import java.io.*;
public class reverse3
{
   public static void reverse(String x)
   {
      char j;
      String reversedString;
      for(int i = 0; i < x.length(); i++)
      {
         try
         {
           if(!Character.isDigit(x.charAt(i)) && !Character.isLetter(x.charAt(i)) && !Character.isWhitespace(x.charAt(i)))
         {
            throw ( new IllegalCharacterException("Illegal Character in String"));
         }//end if
         else if(Character.isDigit(x.charAt(i)) && Character.isLetter(x.charAt(i)) && Character.isWhitespace(x.charAt(i)))
         {
            j = x.charAt(i);
            j = reversedString.charAt(i - 1);
         }//end else if
       }//end try
     catch(IllegalCharacterException e)
     {
       System.out.println(e.getMessage());
     }//end catch
   }//end for loop
}//end method

 public static void main(String[] args)
 {
   Scanner keyboard = new Scanner(System.in);
   String s;
   System.out.println("Please enter a string");
   s = keyboard.next();
   reverse(s);
 }//end main
}//end class

Я продолжаю получать эту ошибку в строке 15 и 23 Ошибка: IllegalCharacterException не может быть разрешен к типу


person Marc    schedule 24.03.2016    source источник
comment
Вы определили свой собственный класс исключений IllegalCharacterException?   -  person rgettman    schedule 24.03.2016
comment
Вам нужно импортировать его, вероятно.   -  person RaminS    schedule 24.03.2016
comment
В своем улове вы можете сделать catch(Exception e){ e.printStackTrace(); }, и это скажет вам, что происходит. Перехват исключения e перехватывает все возможные исключения   -  person Zach    schedule 24.03.2016
comment
@Joris OP получает ошибку компиляции. С другой стороны, e.printStackTrace() всегда лучше, чем System.out.println(e.getMessage())...   -  person Radiodef    schedule 24.03.2016


Ответы (2)


Я думаю, вы ищете IllegalArgumentException

new IllegalArgumentException("Illegal Character in String"));

Брошенный, чтобы указать, что методу был передан недопустимый или недопустимый аргумент.


В противном случае вы можете определить свой собственный класс, если хотите, но я не вижу добавленной стоимости, поскольку сообщение IllegalArgumentException можно настроить.

public class IllegalCharacterException extends Exception {

    public IllegalCharacterException(String msg) {
        super(msg);
    }

}
person Yassin Hajaj    schedule 24.03.2016
comment
Спасибо большое, только что исправил - person Marc; 24.03.2016

вашему коду также нужен блок else. потому что в вашей части кода else if одновременно не могут совпадать 3 типа.

А Illegal Character Exception на самом деле IllegalArgumentException. Если вы хотите указать актуальную проблему, вы можете использовать IllegalArgumentException. С другой стороны, вы также можете использовать Exception.

person SkyWalker    schedule 24.03.2016