2016-03-24 2 views
1

Pour une affectation, je dois entrer une chaîne et l'inverser, tout en lançant une exception de caractère illégal si un caractère de la chaîne n'est pas une lettre, un chiffre ou un espace blanc. Mon professeur dit qu'il n'y a pas de clause de rejet de méthode.Pourquoi cette exception de caractères illégaux n'est-elle pas résolue en un type?

Voici mon code

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 

Je continue à obtenir cette erreur à la ligne 15 et 23 Erreur: IllegalCharacterException ne peut être résolu à un type

+4

Avez-vous défini votre propre classe d'exception 'IllegalCharacterException'? – rgettman

+1

Vous devez probablement l'importer. – Gendarme

+0

Dans votre capture, vous pourriez faire 'catch (Exception e) {e.printStackTrace(); } 'et cela vous dirait ce qui se passe. Catching Exception e attrape toutes les exceptions possibles – Joris

Répondre

4

Je pense que vous cherchez IllegalArgumentException

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

Thrown to indicate that a method has been passed an illegal or inappropriate argument.


Sinon, vous pouvez définir votre propre classe si vous le souhaitez mais je ne vois pas la valeur ajoutée puisque le message IllegalArgumentException peut être personnalisé.

public class IllegalCharacterException extends Exception { 

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

} 
+1

Merci beaucoup, ça vient de se corriger – Marc

+0

@Marc Vous êtes les bienvenus :) –

1

votre code nécessite également le bloc else. parce que dans votre code else if partie, à la fois 3 types ne peuvent pas correspondre.

Et Illegal Character Exception est réellement IllegalArgumentException. Si vous souhaitez spécifier le problème réel, vous pouvez utiliser IllegalArgumentException. D'autre part, vous pouvez également utiliser Exception.